我知道UI线程不应该阻止的2条规则和仅在UI线程中udating ui。
所以我大致知道为什么在setText()中使用Thread.sleep()不起作用。 (因为调用Thread.sleep()会阻止UI线程!!)
可是......为什么?
想象一下下面的代码,我点击了一个按钮来启动计时器以表示每50毫秒的数字。
public void onTimerClicked(View v){
TextView tv = (TextView) findViewById( .. )
for( int i = 1; i <= 10; i++ ){
Thread.sleep(50) // in milil seconds
tv.setText(String.valueOf(i));
}
}
我已经知道当我点击一个按钮时,在我得到一些冻结时间后,只在文本视图上显示“10”。但为什么??如果UI线程遇到tv.setText(..),它不能立即更新UI?或者将任务(更新文本视图UI)排队到主线程上的消息队列?那么排队到消息队列的标准是什么,而不是在面对时立即运行代码。
另外,如果设置带有数字的文本视图全部排队,那么在所有睡眠结束后。 UI会非常快速地更新所有任务吗?是因为我只能更新?
我非常好奇UI线程如何在内部处理UI数据...但很少有关于此的信息或解释。
请让我明白!!
感谢您阅读