samtiger


          QQ:418148757
          Name:yangchuan
          數(shù)據(jù)加載中……
          Hander與HanderThread,Looper以及MessageQueue和Message之間的關(guān)系.

          Hander與HanderThread,Looper以及MessageQueue和Message之間的關(guān)系.

          以上這幾個(gè)東西的目的是設(shè)計(jì)來解決位于主線程中的某些操作比較耗時(shí)(比如httpclient請(qǐng)求),影響界面響應(yīng),而導(dǎo)

          致主程序無法處理其他監(jiān)聽事件。致使程序卡死的問題。(界面提示,無響應(yīng)關(guān)閉)

          1:Handler對(duì)象 中有兩個(gè)屬性,一個(gè)是來自于當(dāng)前線程(或者擁有Looper對(duì)象的線程)的threadlocal變量中的Looper

          對(duì)象和該looper對(duì)象中的messagequeue屬性。
          有這兩個(gè)屬性的目的主要是往當(dāng)前線程的looper對(duì)象的messagequeue隊(duì)列中加入message對(duì)象。
          2:Message對(duì)象,也有兩個(gè)重要的屬性,一個(gè)是Hander對(duì)象,這個(gè)handler對(duì)象就是把該message加入隊(duì)列的那

          個(gè)handler對(duì)象,另一個(gè)對(duì)象就是bundle對(duì)象,這個(gè)對(duì)象的目的就是用來存儲(chǔ)數(shù)據(jù),相當(dāng)于一個(gè)hashmap對(duì)象。

          3:Looper對(duì)象,有一個(gè)重要的屬性就是MessageQueue對(duì)象,Looper的loop方法,會(huì)不斷的從該隊(duì)列中讀取message對(duì)

          象,并調(diào)用messgae對(duì)象中的Hander屬性對(duì)象的dispatherMessage(msg)方法,該方法,就是會(huì)調(diào)

          用handler的handleMessage方法,(也就是我們重寫的那個(gè)方法)。


          4:MessageQueue對(duì)象,管理message的隊(duì)列對(duì)象,它有一個(gè)屬性就是Message對(duì)象,MessageQueue中始終只有一

          個(gè)message對(duì)象,因?yàn)閙essage對(duì)象是一個(gè)鏈?zhǔn)浇Y(jié)構(gòu)的對(duì)象,它的prv和next屬性記錄了他之前和之后的message對(duì)象,所

          以,我們調(diào)用MessageQueue的next方法就能回的需要的message對(duì)象。


          從hander與Looper以及MessageQueue和Message的關(guān)系中我們可以看出來,執(zhí)行流程如下:
            1:有人創(chuàng)建hander對(duì)象,并取得對(duì)應(yīng)的Looper對(duì)象賦給該hander,通過Hander的sendmessage或post方法將handler

          包裝到message對(duì)象中, 再將該message對(duì)象加入到消息隊(duì)列中。(消息隊(duì)列就是Looper對(duì)象中消息隊(duì)列屬性)
            2:線程(管理Looper對(duì)象的線程)不斷的調(diào)用Looper對(duì)象中的loop方法,loop方法又從messageQueue隊(duì)列中獲

          取Message對(duì)象,然后調(diào)用該對(duì)象里的hander屬性對(duì)象的dispatherMessage(msg)方法,從而,依次執(zhí)行我們加入

          的handler任務(wù)。


          這就是hander的處理流程。那么HandlerThread是做什么的,他是一個(gè)管理Looper對(duì)象的線程類。我們的Looper一般來自

          于兩個(gè)地方,一個(gè)地方就是主線程的Looper對(duì)象,另一個(gè)就是我們另外開啟一個(gè)線程來創(chuàng)建和管理Looper對(duì)

          象。android提供已經(jīng)給我們提供了一種這樣的一個(gè)類,那就是HandlerThread對(duì)象。


           

          posted on 2012-07-19 16:59 sam.chuan.yang 閱讀(863) 評(píng)論(0)  編輯  收藏 所屬分類: android


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 济宁市| 奉节县| 陆河县| 寿阳县| 邵东县| 慈利县| 囊谦县| 吉安市| 柯坪县| 琼结县| 中山市| 连平县| 新郑市| 九台市| 平顺县| 阿图什市| 璧山县| 旺苍县| 桦南县| 西平县| 阿勒泰市| 开封县| 金沙县| 分宜县| 奉节县| 巍山| 萝北县| 华宁县| 元阳县| 收藏| 淮南市| 贡嘎县| 拉孜县| 安多县| 四川省| 广东省| 长垣县| 扬中市| 太谷县| 白朗县| 华安县|