samtiger


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

          Hander與HanderThread,Looper以及MessageQueue和Message之間的關系.

          以上這幾個東西的目的是設計來解決位于主線程中的某些操作比較耗時(比如httpclient請求),影響界面響應,而導

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

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

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

          個handler對象,另一個對象就是bundle對象,這個對象的目的就是用來存儲數(shù)據(jù),相當于一個hashmap對象。

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

          象,并調用messgae對象中的Hander屬性對象的dispatherMessage(msg)方法,該方法,就是會調

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


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

          個message對象,因為message對象是一個鏈式結構的對象,它的prv和next屬性記錄了他之前和之后的message對象,所

          以,我們調用MessageQueue的next方法就能回的需要的message對象。


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

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

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

          的handler任務。


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

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

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


           

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


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


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 莱州市| 阿克陶县| 桓仁| 视频| 望都县| 精河县| 东平县| 承德市| 乐清市| 林州市| 吉安市| 衡阳县| 靖西县| 宝山区| 隆林| 衡南县| 南汇区| 内江市| 锦屏县| 海门市| 广南县| 高邑县| 电白县| 区。| 安溪县| 叶城县| 瓦房店市| 新化县| 台东市| 东海县| 遂川县| 临泉县| 临夏市| 绿春县| 玉屏| 内江市| 东明县| 鹤壁市| 阜新市| 静宁县| 龙海市|