我的印象是只能从主线程操纵视图......但是,为什么这不会崩溃:
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)
答案 0 :(得分:1)
Android实际上并没有阻止您从主线程外部更新UI。这只是一个滴答作响的定时炸弹。如果主UI线程当时没有更新UI,那么你的线程就可以做到。
至少那是我的理解。我不是100%肯定知道,但我已经(不小心)从主UI线程之外更新UI。有时它会工作,有时却不会。但作为一种好的做法,我会使用Async task
。