Android非同步訊息處理(一)

來源:互聯網
上載者:User

1. 寫文章之前的聲明:首先,文章寫上原創標籤是有點牽強的,本質上是讀書筆記。上周周六的時候參加了博文視點的一個作者交流會,編輯送我了一本android核心方面的書《Android核心剖析》,拿回來讀了一下,非常的棒。首先作者知識豐富,對android認識很到位,水平比很多其他Android編者高不少。其次,水平高正常,寫書的嗎,都有點水平,但是作者寫書的時候,非常用心,語言通俗易懂,乾脆。這點就非常的難了。自己寫書的時候就有感覺,知道是一回事,表達出來,表達的清楚,又是另外一回事。最後,系列文章適合對android有一定認識的朋友,沒有android基礎的,不要看,浪費時間。

2.寫這些文章的意義:書中有大量的核心分析,其實對於應用程式層開發人員來說,這些東西用不上,我僅僅是把做應用程式開發用的上的東西抽出來,然後加一些自己的東西。

 

什麼是非同步訊息處理:

        對於普通的線程來說,執行完run()方法內的代碼後線程就結束了。而非同步訊息處理線程是指:線程啟動後會進入一個無限迴圈體之中,每執行一次,從線程內部的訊息佇列中取出一個訊息,並回調相應的訊息處理函數,執行完一個訊息後則繼續迴圈。如果訊息佇列為空白,線程會暫停(一般也就是我們調用休眠方法),直到訊息佇列中又新的訊息。

 

非同步訊息處理特點:

      從上面的描述可以看出,非同步訊息處理其實就是一種線程機制,只不過這種機制用的上的地方非常多,最後就單獨提煉了“非同步訊息處理”這個名詞。

 

非同步訊息處理的使用方式:

     一般情況下,如果任務具有以下兩個特點,就可以使用非同步訊息處理機制:

     1.任務常駐記憶體(編程中體現就是run()方法中是無限迴圈),比如用於處理使用者事件的任務。

     2.任務需要根據外部傳遞的訊息做不同的操作。

 

通用的實現非同步訊息處理機制的方式:

      1.每個非同步線程內部包含一個訊息佇列,用來緩衝訊息。

      2.線程的執行中使用while(true)進行無限迴圈,迴圈體中從訊息佇列取出訊息,並根據訊息的來源,回調相應的訊息處理函數(從這裡可以看出:非同步訊息處理,訊息的具體處理並不是非同步訊息處理機制負責的,非同步訊息處理機制只是負責轉寄訊息給處理函數)

      3.其他外部線程可以向本線程的訊息佇列發送訊息,由於有兩個或以上的線程訪問訊息佇列,那麼,訊息佇列內部的讀寫操作必須進行加鎖。

 

Android中非同步訊息處理的實現方式:

     線上程內部有一個或多個Handler對象,外部線程通過該Handler對象的引用向本線程發送非同步訊息,訊息通過Handler對象加入訊息佇列(MessageQueue)。線程內部只有一個MessageQueue對象,線程的run()方法從MessageQueue中讀取訊息,並回調Handler對象中的回呼函數handleMessage()處理訊息。

 

在編程中應該注意的問題:

       1.由於非同步訊息處理機制的一個重要環節是MessageQueue,所以,在發送訊息之前,必須確定MessageQueue已經建立。在android中,給應用程式員提供的建立MessageQueue的介面是:Looper.prepare()。

       2.由於非同步訊息處理機制是一個迴圈線程,而迴圈的啟動也是由程式員控制的,所以,在你要處理訊息之前,應該啟動迴圈。在android中,給應用程式員提供的啟動迴圈的介面是:Looper.loop()。

       3.細心的朋友可能發現,在activity中使用Handler發送,處理訊息時,並沒有上面兩步,其實是系統幫我們做了的。在建立Activity之前,系統就會為Activity建立一個非同步訊息處理線程。

作者“馮小衛”
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.