Android中啟動某個Activity,將先啟動Activity所在的應用。應用啟動時會啟動一個以應用包名為進程名的進程,該進程有一個主線程,叫ActivityThread,也叫做UI線程。
本系列博客將詳細闡述Activity的啟動流程,這些博客基于Cm 10.1源碼研究。
深入理解Activity啟動流程(二)--Activity啟動相關類的類圖深入理解Activity啟動流程(三)--Activity啟動的詳細流程1深入理解Activity啟動流程(三)--Activity啟動的詳細流程2深入理解Activity啟動流程(四)--Activity Task的調度算法用戶從Launcher程序點擊應用圖標可啟動應用的入口Activity,Activity啟動時需要多個進程之間的交互,Android系統中有一個zygote進程專用于孵化Android框架層和應用層程序的進程。還有一個system_server進程,該進程里運行了很多binder service,例如ActivityManagerService,PackageManagerService,WindowManagerService,這些binder service分別運行在不同的線程中,其中ActivityManagerService負責管理Activity棧,應用進程,task。
Activity啟動時的概要交互流程如下圖如下所示(點擊圖片可看大圖):

用戶在Launcher程序里點擊應用圖標時,會通知ActivityManagerService啟動應用的入口Activity,ActivityManagerService發現這個應用還未啟動,則會通知Zygote進程孵化出應用進程,然后在這個dalvik應用進程里執行ActivityThread的main方法。應用進程接下來通知ActivityManagerService應用進程已啟動,ActivityManagerService保存應用進程的一個代理對象,這樣ActivityManagerService可以通過這個代理對象控制應用進程,然后ActivityManagerService通知應用進程創建入口Activity的實例,并執行它的生命周期方法。
后續博客將介紹Activity的詳細啟動流程。
新聞熱點
疑難解答