本文實例講述了Android編程實現(xiàn)異步消息處理機制的幾種方法。分享給大家供大家參考,具體如下:
專注于為中小企業(yè)提供成都網(wǎng)站設(shè)計、做網(wǎng)站服務(wù),電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)來安免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上1000+企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。1、概述Android需要更新ui的話就必須在ui線程上進行操作。否則就會拋異常。
假如有耗時操作,比如:在子線程中下載文件,通知ui線程下載進度,ui線程去更新進度等,這個時候我們就需要用到異步消息處理。
一、什么是HandlerHandler是Android提供用來異步更新UI的一套機制,也是一套消息處理機制,可以用它來發(fā)送消息,也可以用它來接收消息。
二、為什么使用HandlerAndroid在設(shè)計之時,就封裝了一套消息的創(chuàng)建、傳遞、處理機制,作為系統(tǒng)原生的異步消息處理機制的實現(xiàn)之一,我們需要遵循這樣的處理機制,該機制的另外一種實現(xiàn)是AsyncTask。
三、Handler用法1、postdelayed()
延時發(fā)送執(zhí)行子線程(Demo)
2、sendMessage()
回調(diào)handleMessage()
傳遞消息
3、sendToTarget()
傳遞消息
最根本的是解決多線程并發(fā)問題。
假如在同一個Activity中,有多個線程同時更新UI,且沒有加鎖,那會導(dǎo)致什么問題呢?
UI更新混亂。
假如加鎖呢?
會導(dǎo)致性能下降。
使用Handler機制,我們不用去考慮多線程的問題,所有更新UI的操作,都是在 主線程消息隊列中輪詢?nèi)ヌ幚淼摹?br />Handler 、 Looper 、Message 這三者都與Android異步消息處理線程相關(guān)的概念。那么什么叫異步消息處理線程呢?
異步消息處理線程啟動后會進入一個無限的循環(huán)體之中,每循環(huán)一次,從其內(nèi)部的消息隊列中取出一個消息,然后回調(diào)相應(yīng)的消息處理函數(shù),執(zhí)行完成一個消息后則繼續(xù)循環(huán)。若消息隊列為空,線程則會阻塞等待。
—此處有圖為證。
對于Looper主要是prepare()
和loop()
兩個方法。
prepare()
方法
public static final void prepare() { if (sThreadLocal.get() != null) { throw new RuntimeException("Only one Looper may be created per thread"); } sThreadLocal.set(new Looper(true)); }