看到的所有的資料上都說android的子線程不能操作UI,抱著好奇心我寫了下面的程序,竟然運行成功了,不知誰能解釋一下這個問題
public class MainActivity extends Activity {
Button bt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt = (Button) findViewById(R.id.bt);
new Thread(new Runnable() {
public void run() {
bt.setText("haha");
}
}).start();
}
}
android的子線程不能操作UI,資料上是不建議吧,不是說不能。
在onCreate中情況比較特殊,而且你這直接new Thread,中間沒有時間停頓和延時。
首先不能更新的原理關鍵在於ViewRoot中的checkThread方法執行在線程更新UI前還是更新後執行的問題。
這裡啟動線程的時候ViewRoot還沒有。ViewRoot在執行onResume期間會有。
如果你在線程中
new Thread(new Runnable() {
public void run() {
try {
Thread.sleep(2000);//這裡停2秒就是另一個結果了
} catch (InterruptedException e) {
e.printStackTrace();
}
bt.setText("haha");
}
}).start();