這裏的Activity分爲根Activity和普通Activity.這兩種啓動
- 所謂根Activity啓動就是類似冷啓動,先要啓動該Activity所在的應用程序進程,然後在該進程內啓動Activity
- 普通Activity的啓動就是,前提它們所在的進程已經啓動了,然後就是Activity之間的跳轉之類的。
根Activity啓動的整體流程如下:
Launcher到AMS的調用過程如下:
因爲AMS到zygote進程,以及zygote進程啓動應用程序,這些在上篇文章有介紹,這裏不再重複了 應用程序進程啓動介紹
接下來就是AMS與ApplicationThread之間的調用
AMS與ApplicatinThread之間是通過binder通訊的.
最後就是ApplicationThread與ActivityThread之間的調用
普通Activity的啓動
就只有兩層調用
- AMS與ApplicationThread之間的調用
- ApplicationThread與ActivityThread之間的調用
private class ApplicationThread extends IApplicationThread.Stub {
....
....
}
ApplicationThread是ActivityThread中的內部類,運行在binder線程池中
ApplicationThread是AMS與應用程序進程之間的通許橋樑
參考:Android進階解密