調用Looper.prepare();異步
注:1.由於在activity對象在構造前其所在的線程就已經執行Loop.prepare函數因此,在UI線程中無需進行此操做函數
2.在此方法內部執行的操做即爲其成員變量TreadLocal(TLS)設置一個本線程的Looper對象,在Looper的構造方法中建立本線程的消息隊列oop
2. 調用Looper.loop()this
注:1.此方法使本線程進入消息處理循環之中spa
2.在此方法內部會獲取本線程的MessageQueue並執行取出消息和添加消息.net
取出消息:queue.next();此函數內部分爲三部分線程
1.調用一個JNI函數nativePollOnce(mPtr,int time)從C代碼中取消息對象
2.判斷消息所指定的執行時間是否到了,若是到了就返回消息給mMessages變量此代碼需用synchronized(this)關鍵字進行同步blog
3. 若是mMessages爲空則調用空閒回掉函數(可本身定義)隊列
添加消息:enquenceMessage()
1.將msg賦給mMessages,
2.調用nativeWake(mPtr)這也是一個JNI函數他將mMessages添加到C環境中的消息隊列
3.定義Handler
Handler必須被定義在Looper.prepare()以後 由於Handler的構造函數會對looper進行判空操做
異步消息處理線程還能夠和跨進程調用IPC一塊兒使用用於實現異步跨進程調用