我就是那個觀點只能從主線程被操縱的印象......但是,爲什麼這不會崩潰:Android爲什麼這不會拋出錯誤的線程異常?
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和後臺線程絕對不是主線程(線程ID = 1)
雖然我不太熟悉Android UI的線程實現和檢查,但我不禁想知道在調用Activity.onCreate期間是否有「運行UI線程」這樣的事情?畢竟,在這個線程中添加一個簡短的Thread.sleep會導致應用程序崩潰。 – harism
我不熟悉檢查的具體實現(我已經看到一些CalledFromWrongThreadException發生之前)。但通過在UI線程上運行,我認爲Android可能已經檢查了一些調用,以檢查您當前的線程ID是否不是1。線程ID 1一直是我所理解的「主/ UI線程」 –
這相當有趣我相信:在更新文本視圖之前,在線程內添加一個'Thread.sleep(1000);'。該應用程序將崩潰,並引發預期的'CalledFromWrongThreadException'。 –