Android中Toast如何在子線程中調用
在我們編寫程序的時候,碰到過很多次的想要在子線程中調用Toast,這時候程序編譯沒有問題,當我們開始運行在手機上的時候就會出現下列出錯。
從這個錯誤中,我們可以看到, 是因爲一個Looper對象的原因, 當然很多人是不看這個報錯信息的,因爲大部分android程序員都認爲Toast是一個ui控件,需要在主ui線程中操作纔可以。。。(我瞭解的從事一兩年開發經驗的人也是這麼理解的)
下面分析一下Toast在主線程與子線程運行的缺失項:
android的主ui線程中其android框架已經默認給出了一個looper對象, 而我們自己創建的子線程中,looper對象需要自己給構建出來。這也就是爲什麼我們在子線程中使用Toast的時候會報出上圖異常。。(如果不明白Toast爲什麼在子線程使用需要Looper對象的可自己觀察源碼)
解決方案:
既然已經知道了問題是如何產生的, 那麼我們現在就只需要在我們的子線程中把Toast所需要的Looper對象給創建出來就可以了。
new Thread(new Runnable() {
@Override
public void run() {
Looper.prepare();
Toast.makeText(TwoActivity.this, "子線程顯示", Toast.LENGTH_SHORT).show();
Looper.loop();
}
}).start();
我們已經給子線程裏面創建了一個Looper對象,這樣我們的Toast就可以加入到一個消息隊列中,才能夠進行輸出!!
簡單!
已完結!