根Activity組件的啟動過程

圖例只描述了Activity組件在進(jìn)程外的啟動過程勇皇,即從Launcher點(diǎn)擊圖標(biāo)啟動MainActivity的過程。

MainActivity的啟動過程涉及到了三個進(jìn)程。MainActivity組件、LauncherActivity組件和ActivityManagerService組件分別運(yùn)行在不同的進(jìn)程中。

Activity啟動過程

在第23步中會首先創(chuàng)建進(jìn)程易阳,流程如下圖


其中ActivityManagerService和Process運(yùn)行在system_server進(jìn)程中,啟動新的進(jìn)程時吃粒,需要system_server與zygote進(jìn)程進(jìn)行socket通信潦俺,從而fork出新的進(jìn)程。執(zhí)行RuntimeInit.zygoteInit() -> RuntimeInit.applicationInit() -> RuntimeInit.invokeStaticMain()

    public static final void zygoteInit(int targetSdkVersion, String[] argv, ClassLoader classLoader)
            throws ZygoteInit.MethodAndArgsCaller {
        if (DEBUG) Slog.d(TAG, "RuntimeInit: Starting application from zygote");

        Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "RuntimeInit");
        redirectLogStreams();

        commonInit();
        nativeZygoteInit();
        applicationInit(targetSdkVersion, argv, classLoader);
    }
**RuntimeInit.invokeStaticMain()**
//className的值是“android.app.ActivityThread”
private static void invokeStaticMain(String className, String[] argv, ClassLoader classLoader)
            throws ZygoteInit.MethodAndArgsCaller {
        Class<?> cl;

        try {
            cl = Class.forName(className, true, classLoader);
        } catch (ClassNotFoundException ex) {
            ......  
        }

        Method m;
        try {
            m = cl.getMethod("main", new Class[] { String[].class });
        } catch (NoSuchMethodException ex) {
            ......
        } catch (SecurityException ex) {
            ......
        }
        ......
        /*
         * This throw gets caught in ZygoteInit.main(), which responds
         * by invoking the exception's run() method. This arrangement
         * clears up all the stack frames that were required in setting
         * up the process.
         */
        throw new ZygoteInit.MethodAndArgsCaller(m, argv);
    }

注意
ActivityThread.main方法的執(zhí)行是通過拋異常的方式執(zhí)行的徐勃。拋出MethodAndrArgsCaller異常事示,一直按照原路向上拋。在ZygoteInit.main方法中捕獲異常僻肖,并調(diào)用run方法反射執(zhí)行ActivityThread.main方法

public class ZygoteInit {
    public static void main(String argv[]) {
        try {
            ......

            registerZygoteSocket(socketName);
            ......
            preload();
            ......
            if (startSystemServer) {
                startSystemServer(abiList, socketName);
            }

            runSelectLoop(abiList);

            closeServerSocket();
        } catch (MethodAndArgsCaller caller) {
            // 處理異常
            caller.run();
        } catch (RuntimeException ex) {
            Log.e(TAG, "Zygote died with exception", ex);
            closeServerSocket();
            throw ex;
        }
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末肖爵,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子臀脏,更是在濱河造成了極大的恐慌劝堪,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件揉稚,死亡現(xiàn)場離奇詭異秒啦,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)搀玖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門余境,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人灌诅,你說我怎么就攤上這事芳来。” “怎么了猜拾?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵绣张,是天一觀的道長。 經(jīng)常有香客問我关带,道長,這世上最難降的妖魔是什么沼撕? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任宋雏,我火速辦了婚禮,結(jié)果婚禮上务豺,老公的妹妹穿的比我還像新娘磨总。我一直安慰自己,他們只是感情好笼沥,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布蚪燕。 她就那樣靜靜地躺著娶牌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪馆纳。 梳的紋絲不亂的頭發(fā)上诗良,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天,我揣著相機(jī)與錄音鲁驶,去河邊找鬼鉴裹。 笑死,一個胖子當(dāng)著我的面吹牛钥弯,可吹牛的內(nèi)容都是我干的径荔。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼脆霎,長吁一口氣:“原來是場噩夢啊……” “哼总处!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起睛蛛,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤鹦马,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后玖院,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體菠红,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年难菌,在試婚紗的時候發(fā)現(xiàn)自己被綠了试溯。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡郊酒,死狀恐怖遇绞,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情燎窘,我是刑警寧澤摹闽,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站褐健,受9級特大地震影響付鹿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蚜迅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一舵匾、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧谁不,春花似錦坐梯、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谎替。三九已至,卻和暖如春蹋辅,著一層夾襖步出監(jiān)牢的瞬間钱贯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工晕翠, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留喷舀,地道東北人。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓淋肾,卻偏偏與公主長得像硫麻,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子樊卓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容