欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Android消息機制詳解及實例代碼-創(chuàng)新互聯(lián)

Android 消息機制

創(chuàng)新互聯(lián)專注于企業(yè)網(wǎng)絡(luò)營銷推廣、網(wǎng)站重做改版、龍勝網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、HTML5建站商城網(wǎng)站定制開發(fā)、集團公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為龍勝等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

1.概述

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


Android 消息機制詳解及實例代碼

Handler 、 Looper 、Message有啥關(guān)系?


在子線程中完成耗時操作,很多情況下需要更新UI,最常用的就是通過Handler將一個消息Post到UI線程中,然后再在Handler的handlerMessage方法中進行處理。而每個Handler都會關(guān)聯(lián)一個消息隊列(MessageQueue),Looper負責的就是創(chuàng)建一個MessageQueue,而每個Looper又會關(guān)聯(lián)一個線程(Looper通過ThreadLocal封裝)。默認情況下,MessageQueue只有一個,即主線程的消息隊列。


上面就是Android消息機制的基本原理,如果想了解更詳細,我們從源碼開始看。

2.源碼解讀

(1)ActivityThread主線程中啟動啟動消息循環(huán)Looper

public final class ActivityThread {
  public static void main(String[] args) {
    //代碼省略
    //1.創(chuàng)建消息循環(huán)的Looper
    Looper.prepareMainLooper();

    ActivityThread thread = new ActivityThread();
    thread.attach(false);
    if (sMainThreadHandler == null) {
      sMainThreadHandler = thread.getHandler();
    }
    AsyncTask.init();

    //2.執(zhí)行消息循環(huán)
    Looper.loop();
    throw new RuntimeException("Main thread loop unexpectedly exited");
  }
}

當前標題:Android消息機制詳解及實例代碼-創(chuàng)新互聯(lián)
新聞來源:http://www.chinadenli.net/article4/dodhie.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標簽優(yōu)化外貿(mào)網(wǎng)站建設(shè)外貿(mào)建站靜態(tài)網(wǎng)站云服務(wù)器App開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司