概述
Android中啟動(dòng)某個(gè)Activity赘娄,將先啟動(dòng)Activity所在的應(yīng)用。應(yīng)用啟動(dòng)時(shí)會(huì)啟動(dòng)一個(gè)以應(yīng)用包名為進(jìn)程名的進(jìn)程宏蛉,該進(jìn)程有一個(gè)主線(xiàn)程遣臼,叫ActivityThread,也叫做UI線(xiàn)程拾并。
本系列博客將詳細(xì)闡述Activity的啟動(dòng)流程揍堰。
深入理解Activity啟動(dòng)流程(二)–Activity啟動(dòng)相關(guān)類(lèi)的類(lèi)圖
深入理解Activity啟動(dòng)流程(三)–Activity啟動(dòng)的詳細(xì)流程1
深入理解Activity啟動(dòng)流程(三)–Activity啟動(dòng)的詳細(xì)流程2
深入理解Activity啟動(dòng)流程(四)–Activity Task的調(diào)度算法
Activity啟動(dòng)時(shí)的概要交互流程
用戶(hù)從Launcher程序點(diǎn)擊應(yīng)用圖標(biāo)可啟動(dòng)應(yīng)用的入口Activity,Activity啟動(dòng)時(shí)需要多個(gè)進(jìn)程之間的交互嗅义,Android系統(tǒng)中有一個(gè)zygote進(jìn)程專(zhuān)用于孵化Android框架層和應(yīng)用層程序的進(jìn)程屏歹。還有一個(gè)system_server進(jìn)程,該進(jìn)程里運(yùn)行了很多binder service之碗,例如ActivityManagerService蝙眶,PackageManagerService,WindowManagerService褪那,這些binder service分別運(yùn)行在不同的線(xiàn)程中幽纷,其中ActivityManagerService負(fù)責(zé)管理Activity棧,應(yīng)用進(jìn)程博敬,task友浸。
Activity啟動(dòng)時(shí)的概要交互流程如下圖如下所示
用戶(hù)在Launcher程序里點(diǎn)擊應(yīng)用圖標(biāo)時(shí),會(huì)通知ActivityManagerService啟動(dòng)應(yīng)用的入口Activity偏窝,ActivityManagerService發(fā)現(xiàn)這個(gè)應(yīng)用還未啟動(dòng)收恢,則會(huì)通知Zygote進(jìn)程孵化出應(yīng)用進(jìn)程,然后在這個(gè)dalvik應(yīng)用進(jìn)程里執(zhí)行ActivityThread的main方法囚枪。應(yīng)用進(jìn)程接下來(lái)通知ActivityManagerService應(yīng)用進(jìn)程已啟動(dòng),ActivityManagerService保存應(yīng)用進(jìn)程的一個(gè)代理對(duì)象劳淆,這樣ActivityManagerService可以通過(guò)這個(gè)代理對(duì)象控制應(yīng)用進(jìn)程链沼,然后ActivityManagerService通知應(yīng)用進(jìn)程創(chuàng)建入口Activity的實(shí)例,并執(zhí)行它的生命周期方法沛鸵。