Handler中不能操作Toast的解決方案

2021-07-10 11:06:01 字數 936 閱讀 8913

在安卓開發中,toast和alertdialog可以說是最常用的控制項之一了吧,但是你在實際開發中有沒有遇到過這個異常呢:

can』t create handler inside thread that has not called lopper.prepare()

沒錯,細心的你一定發現了這不就是在「非主線程中操作ui」或「在handler中巢狀handler」引發的異常嗎,那麼關於為什麼會出現此錯誤,以及如何解決這種異常,筆者將在此文中進行簡單講解。

不能夠在handler中巢狀handler大家都知道,也盡量在避免,那麼在handler中為什麼還不能使用toast呢,這個其實是因為toast內部是乙個由handler控制其延時來實現其定時自動消失效果的。至於不能在子執行緒中使用toast也很好理解,顯示toast也屬於ui操作,當然不能夠在子執行緒中進行了。

這些問題在開發中盡量避免就好了,那實在無法避免有沒有什麼解決方案呢?答案是肯定的。

在ui操作外面包裝一層looper.prepare()looper.loop()即可,示例**如下:

looper.prepare();

// 此處執行ui操作

toast.maketext(mcontext, "text", toast.length_short).show();

looper.loop();

使用looper的變形:

new handler(looper.getmainlooper()).post(new runnable() 

});

還可以使用handler、runonuithread、async等方案來解決,具體實現此處就不一一贅述了。

最後說明一下筆者學識還很淺顯,如有理解偏差,還請大家諒解和指點。

android中Handler的用法

寫了乙個demo,如下 public class mainactivity extends activity endbutton.setonclicklistener new onclicklistener 建立handler物件 handler handler new handler runnab...

子執行緒中建立handler

方法1 android顯示操作介面,需要在主線程中執行 不在主線程中需要在handler中執行 looper.prepare myhandler new handler new handler.callback looper.loop 必須開始looper但是開啟的時刻可以自己控制 方法2 publ...

android中的Handler機制

一 為什麼要用handler 之所以需要跨執行緒通訊是因為在 android 中主線程通常只負責 ui 的建立和修改,子執行緒負責網路訪問和耗時操作,因此,主線程和子執行緒需要經常配合使用才能完成整個 android 功能,這時候就有了handler的出現。二 什麼是handler 訊息佇列,先進後...