1. 程式人生 > >深入理解Activity啟動流程(一)–Activity啟動的概要流程

深入理解Activity啟動流程(一)–Activity啟動的概要流程

   最詳細的Activity啟動流程分析,本文轉自:http://www.cloudchou.com/android/post-788.html

 概述

Android中啟動某個Activity,將先啟動Activity所在的應用。應用啟動時會啟動一個以應用包名為程序名的程序,該程序有一個主執行緒,叫ActivityThread,也叫做UI執行緒。

本系列部落格將詳細闡述Activity的啟動流程,這些部落格基於Cm 10.1原始碼研究。

Activity啟動時的概要互動流程

使用者從Launcher程式點選應用圖示可啟動應用的入口Activity,Activity啟動時需要多個程序之間的互動,Android系統中有一個zygote程序專用於孵化Android框架層和應用層程式的程序。還有一個system_server程序,該程序裡運行了很多binder service,例如ActivityManagerService,PackageManagerService,WindowManagerService,這些binder service分別執行在不同的執行緒中,其中ActivityManagerService負責管理Activity棧,應用程序,task。

Activity啟動時的概要互動流程如下圖如下所示(點選圖片可看大圖):

activity_start_flow

使用者在Launcher程式裡點選應用圖示時,會通知ActivityManagerService啟動應用的入口Activity,ActivityManagerService發現這個應用還未啟動,則會通知Zygote程序孵化出應用程序,然後在這個dalvik應用程序裡執行ActivityThread的main方法。應用程序接下來通知ActivityManagerService應用程序已啟動,ActivityManagerService儲存應用程序的一個代理物件,這樣ActivityManagerService可以通過這個代理物件控制應用程序,然後ActivityManagerService通知應用程序建立入口Activity的例項,並執行它的生命週期方法。

後續部落格將介紹Activity的詳細啟動流程。