Android中Toast如何在子線程中調用

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就可以加入到一個消息隊列中,才能夠進行輸出!!

簡單!

已完結!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章