這篇文章主要介紹了如何解決使用Handler時(shí)Can't create handler inside thread that has not called Looper.prepare()問(wèn)題,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
專(zhuān)注于為中小企業(yè)提供成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)托克遜免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了成百上千家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
在android開(kāi)發(fā)中,主線程不能進(jìn)行耗時(shí)操作,所以我們經(jīng)常把耗時(shí)操作放在子線程中進(jìn)行,那么就需要子線程與主線程相互交流,就需要使用到handler.
而在使用handler過(guò)程中,如果對(duì)handler使用不太熟練的話就偶爾會(huì)出現(xiàn)Can't create handler inside thread that has not called Looper.prepare()的報(bào)錯(cuò)異常。之前在Handler的原理的博文中有講到,Handler的使用會(huì)依靠Looper循環(huán)來(lái)發(fā)送消息,如果不創(chuàng)建Looper對(duì)象,消息就無(wú)法發(fā)送,系統(tǒng)就會(huì)崩潰。那么為什么使用handler有時(shí)候可以運(yùn)行,有時(shí)候不能運(yùn)行呢?
其實(shí)就是如果在主線程中創(chuàng)建handler時(shí),系統(tǒng)會(huì)自動(dòng)創(chuàng)建Looper,但是在子線程中創(chuàng)建handler時(shí),是不會(huì)自動(dòng)創(chuàng)建Looper的,此時(shí)如果不手動(dòng)創(chuàng)建Looper,系統(tǒng)就會(huì)崩潰
舉例如下:首先在子線程創(chuàng)建Handler(即主線程發(fā)送消息給子線程處理)
系統(tǒng)就會(huì)報(bào)出Can't create handler inside thread that has not called Looper.prepare()的報(bào)錯(cuò)異常。
解決方法是:
通過(guò)Looper.prepare();創(chuàng)建Looper對(duì)象
下面在主線程中創(chuàng)建Handler
在主線程創(chuàng)建Handler(即子線程發(fā)送消息給主線程處理),系統(tǒng)就會(huì)自動(dòng)創(chuàng)建Looper,而不需要手動(dòng)創(chuàng)建Looper.
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“如何解決使用Handler時(shí)Can't create handler inside thread that has not called Looper.prepare()問(wèn)題”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!