Android 消息機制

1.概述
Android應用啟動時,會默認有一個主線程(UI線程),在這個線程中會關聯一個消息隊列(MessageQueue),所有的操作都會被封裝成消息隊列然后交給主線程處理。為了保證主線程不會退出,會將消息隊列的操作放在一個死循環中,程序就相當于一直執行死循環,每循環一次,從其內部的消息隊列中取出一個消息,然后回調相應的消息處理函數(handlerMessage),執行完成一個消息后則繼續循環,若消息隊列為空,線程則會阻塞等待。因此不會退出。如下圖所示:

Handler 、 Looper 、Message有啥關系?
在子線程中完成耗時操作,很多情況下需要更新UI,最常用的就是通過Handler將一個消息Post到UI線程中,然后再在Handler的handlerMessage方法中進行處理。而每個Handler都會關聯一個消息隊列(MessageQueue),Looper負責的就是創建一個MessageQueue,而每個Looper又會關聯一個線程(Looper通過ThreadLocal封裝)。默認情況下,MessageQueue只有一個,即主線程的消息隊列。
上面就是Android消息機制的基本原理,如果想了解更詳細,我們從源碼開始看。
2.源碼解讀
(1)ActivityThread主線程中啟動啟動消息循環Looper
public final class ActivityThread {
  public static void main(String[] args) {
    //代碼省略
    //1.創建消息循環的Looper
    Looper.prepareMainLooper();
    ActivityThread thread = new ActivityThread();
    thread.attach(false);
    if (sMainThreadHandler == null) {
      sMainThreadHandler = thread.getHandler();
    }
    AsyncTask.init();
    //2.執行消息循環
    Looper.loop();
    throw new RuntimeException("Main thread loop unexpectedly exited");
  }
}
            
                當前標題:Android消息機制詳解及實例代碼-創新互聯
                
                新聞來源:http://www.yijiale78.com/article4/dodhie.html
            
成都網站建設公司_創新互聯,為您提供標簽優化、外貿網站建設、外貿建站、靜態網站、云服務器、App開發
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯