有用的博客:Android源碼分析-Activity的啟動過程
Activity啟動全過程解析
先看一張圖,根據(jù)這張圖可以很清楚的開到Activity啟動過程中各個方法的調(diào)用過程:

activity啟動過程
- ActivityManagerServices,簡稱AMS,服務(wù)端對象,負(fù)責(zé)系統(tǒng)中所有Activity的生命周期
- ActivityThread,App的真正入口。當(dāng)開啟App之后,會調(diào)用main()開始運(yùn)行,開啟消息循環(huán)隊(duì)列,這就是傳說中的UI線程或者叫主線程。與ActivityManagerServices配合,一起完成Activity的管理工作
- ApplicationThread,用來實(shí)現(xiàn)ActivityManagerService與ActivityThread之間的交互。在ActivityManagerService需要管理相關(guān)Application中的Activity的生命周期時,通過ApplicationThread的代理對象與ActivityThread通訊。
- ApplicationThreadProxy,是ApplicationThread在服務(wù)器端的代理,負(fù)責(zé)和客戶端的ApplicationThread通訊。AMS就是通過該代理與ActivityThread進(jìn)行通信的。
- Instrumentation,每一個應(yīng)用程序只有一個Instrumentation對象,每個Activity內(nèi)都有一個對該對象的引用。Instrumentation可以理解為應(yīng)用進(jìn)程的管家,ActivityThread要創(chuàng)建或暫停某個Activity時,都需要通過Instrumentation來進(jìn)行具體的操作。
ActivityStack,Activity在AMS的棧管理,用來記錄已經(jīng)啟動的Activity的先后關(guān)系,狀態(tài)信息等。通過ActivityStack決定是否需要啟動新的進(jìn)程。 - ActivityRecord,ActivityStack的管理對象,每個Activity在AMS對應(yīng)一個ActivityRecord,來記錄Activity的狀態(tài)以及其他的管理信息。其實(shí)就是服務(wù)器端的Activity對象的映像。
- TaskRecord,AMS抽象出來的一個“任務(wù)”的概念,是記錄ActivityRecord的棧,一個“Task”包含若干個ActivityRecord。AMS用TaskRecord確保Activity啟動和退出的順序。如果你清楚Activity的4種launchMode,那么對這個概念應(yīng)該不陌生。