9.2

  • Looper不斷獲取MessageQueue中的Message,交由Handler處理
    • MessageQueue內(nèi)包含Runnable與Message,Message內(nèi)保存相同類型的Object
    • MessageQueue隊列為空后Looper進入休眠
  • Handler
    • 每個Thread對應(yīng)一個Looper、每個Looper對應(yīng)一個MessageQueue、MessageQueue內(nèi)有多個Message、每個Message對應(yīng)1個Handler、每個MessageQueue可以對應(yīng)多個Handler
    • Handler作用:
      • 處理Message(Handler.dispatchMessage派發(fā)消息或handleMessage將Message分發(fā)給責(zé)任人)
      • 將Message壓入MessageQueue中(程序的有序性,根據(jù)優(yōu)先級決定處理事件的先后順序)
    • Handler()初始函數(shù)中獲取當(dāng)前線程中Looper實例,并將其對應(yīng)的MessageQueue(mLooper.mQueue)賦給Handler對應(yīng)MessageQueue(mQueue)
  • MessageQueue
    • 隊列結(jié)構(gòu),隊內(nèi)數(shù)據(jù)通過指針排序
  • Looper
    • Looper類中含sThreadLocal靜態(tài)全局變量,一旦import即創(chuàng)建完成
    • Looper.prepare根據(jù)保存的模板類sThreadLocal得到返回的Looper
    • ThreadLocal范圍僅限于自己所在線程,每個線程Looper是獨立的
 class ThreadTest extends Thread{
      public Handler mHandler;
      public void run(){
            Looper.prepare();//
            mHandler = new Handler(){//
                public void handleMessage(Message msg){
                   ...... 
                }
            };
            Looper.loop();//進入循環(huán)
      }
  }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容