为什么睡眠后setText()不';不行?在android内部,消息队列是如何工作的?

为什么睡眠后setText()不';不行?在android内部,消息队列是如何工作的?,android,multithreading,Android,Multithreading,我知道UI线程不应该阻塞的两条规则,并且只在UI线程中使用UI 所以我大致知道为什么将Thread.sleep()与setText()一起使用不起作用。(因为call Thread.sleep()会阻止UI线程!!) 但是…为什么 想象下面的代码,我点击一个按钮启动计时器,表示每50毫秒一个数字 public void onTimerClicked(View v){ TextView tv = (TextView) findViewById( .. ) for( int i =

我知道UI线程不应该阻塞的两条规则,并且只在UI线程中使用UI

所以我大致知道为什么将Thread.sleep()与setText()一起使用不起作用。(因为call 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));
    }
}
public void onTimerClicked(视图五){
TextView tv=(TextView)findViewById(..)

对于(int i=1;i因为
onTimerClicked
在UI线程上被调用…您用
onTimerClicked
内部的循环阻止了它…所以没有时间重新绘制(因为它也是在当前被阻止的UI线程上完成的)…UI线程只是从消息队列中获取一个作业并执行它…因此它不能同时执行两个操作time@Selvin谢谢你的回复。但这不是我想要的。事实上我找到了很好的答案。这很好地描述了我真的很想知道的