真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

handler消息處理機(jī)制的用法

這篇文章運(yùn)用了實(shí)例代碼展示了handler消息處理機(jī)制的使用方法,代碼非常詳細(xì),解讀可供感興趣的小伙伴們參考借鑒,希望對(duì)大家有所幫助。        

創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括東平網(wǎng)站建設(shè)、東平網(wǎng)站制作、東平網(wǎng)頁(yè)制作以及東平網(wǎng)絡(luò)營(yíng)銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,東平網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到東平省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

Android系統(tǒng)的消息隊(duì)列和消息循環(huán)都是針對(duì)具體線程的,一個(gè)線程可以存在(當(dāng)然也可以不存在)一個(gè)消息隊(duì)列(Message Queue)和一個(gè)消息循環(huán)(Looper)。Android中除了UI線程(主線程),創(chuàng)建的工作線程默認(rèn)是沒有消息循環(huán)和消息隊(duì)列的。如果想讓該線程具有消息隊(duì)列和消息循環(huán),并具有消息處理機(jī)制,就需要在線程中首先調(diào)用Looper.prepare()來創(chuàng)建消息隊(duì)列,然后調(diào)用Looper.loop()進(jìn)入消息循環(huán)。

class LooperThread extends Thread {  

   public Handler mHandler;  

   publicvoid run() {  

         Looper.prepare();  

         mHandler = new Handler() {  

           publicvoid handleMessage(Message msg) {  

               // process incoming messages here

            }  

         };  

        Looper.loop();  

    }  

}

Handler可以把一個(gè)Message對(duì)象或者Runnable對(duì)象壓入到消息隊(duì)列中,進(jìn)而在UI線程中獲取Message或者執(zhí)行Runnable對(duì)象,所以Handler把壓入消息隊(duì)列有兩大體系,Post和sendMessage。

Post:Post允許把一個(gè)Runnable對(duì)象入隊(duì)到消息隊(duì)列中。它的方法有:post(Runnable)、      postAtTime(Runnable,long)、postDelayed(Runnable,long)。

sendMessage:sendMessage允許把一個(gè)包含消息數(shù)據(jù)的Message對(duì)象壓入到消息隊(duì)列中。它的方法有:sendEmptyMessage(int)、sendMessage(Message)、sendMessageAtTime(Message,long)、sendMessageDelayed(Message,long)。

Message:Message是一個(gè)final類,所以不可被繼承。使用Message.obtain()這個(gè)靜態(tài)的方法或者Handler.obtainMessage()獲取。Message.obtain()方法具有多個(gè)重載方法,大致可以分為為兩類,一類是無需傳遞Handler對(duì)象,對(duì)于這類的方法,當(dāng)填充好消息后,需要調(diào)用Handler.sendMessage()方法來發(fā)送消息到消息隊(duì)列中。第二類需要傳遞一個(gè)Handler對(duì)象,這類方法可以直接使用Message.sendToTarget()方法發(fā)送消息到消息隊(duì)列中,這是因?yàn)樵贛essage對(duì)象中有一個(gè)私有的Handler類型的屬性Target,當(dāng)時(shí)obtain方法傳遞進(jìn)一個(gè)Handler對(duì)象的時(shí)候,會(huì)給Target屬性賦值,當(dāng)調(diào)用sendToTarget()方法的時(shí)候,實(shí)際在它內(nèi)部還是調(diào)用的Target.sendMessage()方法。

總結(jié):一個(gè)Looper對(duì)應(yīng)一個(gè)MessageQueue,一個(gè)線程對(duì)應(yīng)一個(gè)Looper,一個(gè)線程可以有多個(gè)looper。

Handler handler = new Handler(){...}創(chuàng)建Handler。這樣創(chuàng)建的handler是在主線程即UI線程下的Handler,即這個(gè)Handler是與UI線程下的默認(rèn)Looper綁定的。HandlerThread實(shí)際上就一個(gè)Thread,只不過它比普通的Thread多了一個(gè)Looper。創(chuàng)建HandlerThread時(shí)要把它啟動(dòng)了,即調(diào)用start()方法。然后創(chuàng)建Handler時(shí)將HandlerThread中的looper對(duì)象傳入。

HandlerThread thread = new HandlerThread("MyHandlerThread");
thread.start();
mHandler = new Handler(thread.getLooper());
mHandler.post(new Runnable(){...});
那么這個(gè)Handler對(duì)象就是與HandlerThread這個(gè)線程綁定了(這時(shí)就不再是與UI線程綁定了,這樣它處理耗時(shí)操作將不會(huì)阻塞UI)。

上文描述的就是handler消息處理機(jī)制的用法,具體使用情況還需要大家自己動(dòng)手實(shí)驗(yàn)使用過才能領(lǐng)會(huì)。如果想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


名稱欄目:handler消息處理機(jī)制的用法
網(wǎng)站鏈接:http://weahome.cn/article/ishogp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部