mHandler = new Handler();
mHandler.post(new Runnable() {
@Override
public void run() {
text.setText(""+i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// TODO Auto-generated method stub
while(i<5){
i ++;
text.setText(""+i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});大家看看上面的代码,有什么问题?问什么5秒后,textview才会显示 5 而不是实时刷新?
mHandler.post(new Runnable() {
@Override
public void run() {
text.setText(""+i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// TODO Auto-generated method stub
while(i<5){
i ++;
text.setText(""+i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});大家看看上面的代码,有什么问题?问什么5秒后,textview才会显示 5 而不是实时刷新?
Log.i("Test", "现在显示:"+i);然后再运行看Log日志,就会清楚结果了。
i ++;
text.setText(""+i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
你睡了5秒啊,当然5秒后显示啊
你要把信息handler出去 而不是直接在线程里进行setText
text.setText(""+i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}那为什么没有显示 0?
在单线程的UI模型中,只有在这个线程执行一次循环后才会更新界面在你的run方法里的sleep等于是让UI线程休眠,要一直等到你的run方法执行完,UI才会得到刷新。也就是说,UI上,只能看到最后一次循环执行的结果
awt,swing,swt,j2me,android