10分鐘掌握Android消息機(jī)制(五)主線程的消息循環(huán)

本文為個人學(xué)習(xí)筆記分享,沒有任何商業(yè)化行為,對其他文章的引用都會標(biāo)記。如有侵權(quán)行為,請及時提醒更正!如需轉(zhuǎn)載請表明出處
本文主要來源是 任玉剛大神的《Android開發(fā)藝術(shù)探索》

Android 的主線程就是ActivityTread,主線程的入口方法為main,在main方法中系統(tǒng)會通過Looper.prepareMainLooper()來創(chuàng)建主線程的Looper以及MeesageQueue,并通過Looper.loop()來開啟主線程的消息循環(huán),這個過程如下所示。

public static void main(String[] args) {
        Looper.prepareMainLooper();
        ActivityThread thread = new ActivityThread();
        thread.attach(false);

        if (sMainThreadHandler == null) {
            sMainThreadHandler = thread.getHandler();
        }
        Looper.loop();

        throw new RuntimeException("Main thread loop unexpectedly exited");
}

主線程的消息循環(huán)開始了以后,ActivityTread還需要一個Handler來和消息隊列進(jìn)行交互,這個Handler就是ActivityTread.H,它內(nèi)部定義了一組消息類型,主要包含了四大組件的啟動和停止過程,如下所示。


    private class H extends Handler {
        public static final int LAUNCH_ACTIVITY         = 100;
        public static final int PAUSE_ACTIVITY          = 101;
        public static final int PAUSE_ACTIVITY_FINISHING= 102;
        public static final int STOP_ACTIVITY_SHOW      = 103;
        public static final int STOP_ACTIVITY_HIDE      = 104;
        public static final int SHOW_WINDOW             = 105;
        public static final int HIDE_WINDOW             = 106;
        public static final int RESUME_ACTIVITY         = 107;
        public static final int SEND_RESULT             = 108;
        public static final int DESTROY_ACTIVITY        = 109;
        public static final int BIND_APPLICATION        = 110;
        public static final int EXIT_APPLICATION        = 111;
        public static final int NEW_INTENT              = 112;
        public static final int RECEIVER                = 113;
        public static final int CREATE_SERVICE          = 114;
        public static final int SERVICE_ARGS            = 115;
        public static final int STOP_SERVICE            = 116;
        ......
}

ActivityThread通過ApplicationThread和AMS進(jìn)行進(jìn)程間通訊,AMS以進(jìn)程間通訊的方式完成ActivityThread的請求后會回調(diào)ApplicationThread中的Binder方法,然后ApplicationThread會向H發(fā)消息,H收到消息后會將ApplicationThread中的邏輯切換到ActivityThread去執(zhí)行,即切換到主線程去執(zhí)行,這個過程就是主線程的消息循環(huán)模型。

整理寫作不易,請小伙伴多多支持,麻煩請點贊關(guān)注支持一下,??????。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容