android 異步線程的實現

  1. 調用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一塊兒使用用於實現異步跨進程調用

      轉載請註明出處:  http://my.oschina.net/u/1474965/blog/302410

相關文章
相關標籤/搜索