Android为什么这不会抛出错误的线程异常?

时间:2013-12-15 21:57:36

标签: android multithreading

我的印象是只能从主线程操纵视图......但是,为什么这不会崩溃:

public class MainActivity extends Activity {
    TextView tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        tv = new TextView(this);
        tv.setText("original text");
        setContentView(tv);

        new Thread(new Runnable() {
            @Override
            public void run() {
                tv.setText("trollollolol i should die here but i won't.");
            }
        }).start();        
    }
}

我跑上了设备&模拟器,都工作得很好,我看到文本的变化。发生了什么事?

我还检查了线程ID,后台线程是DEFINITELY而不是主线程(threadID = 1)

1 个答案:

答案 0 :(得分:1)

Android实际上并没有阻止您从主线程外部更新UI。这只是一个滴答作响的定时炸弹。如果主UI线程当时没有更新UI,那么你的线程就可以做到。 至少那是我的理解。我不是100%肯定知道,但我已经(不小心)从主UI线程之外更新UI。有时它会工作,有时却不会。但作为一种好的做法,我会使用Async task