Android進程啟動流程(App啟動)

理解Android進程創建流程
理解Android進程啟動之全過程

站在GITYUAN大神的肩膀上學習,用一張神圖表示進程基本的啟動流程.

93730-5121eb1d162d109e.png

上圖還需對照源碼進行查看,簡述一下啟動流程
<p>
Android系統全貌描述到了Zygote孵化了第一個進程是system_server進程,而且孵化第一個App進程是Launcher,也就是桌面App。
<p>
當點擊桌面App的時候,發起進程就是Launcher所在的進程,啟動遠程進程,利用Binder發送消息給system_server進程
<p>
system_server進程中啟動了N多服務,例如ActiivityManagerService,WindowManagerService等。啟動進程的操作會先調用AMS.startProcessLocked方法,內部調用 Process.start(android.app.ActivityThread);而后通過socket通信告知Zygote進程fork子進程,即app進程。進程創建后將ActivityThread加載進去,執行ActivityThread.main()方法。
<p>
app進程中,main方法會實例化ActivityThread,同時創建ApplicationThread,Looper,Hander對象,調用attach方法進行Binder通信,looper啟動循環。attach方法內部獲取ActivityManagerProxy對象,其實現了IActivityManager接口,作為客戶端調用attachApplication(mAppThread)方法,將thread信息告知AMS
<p>
system_server進程中,AMS中會調用ActivityManagerNative.onTransact方法,真正的邏輯在服務端AMS.attachApplication方法中,內部調用AMS.attachApplicationLocked方法,方法的參數是IApplicationThread,在此處是ApplicationThreadProxy對象,用于跟前面通過Process.start()所創建的進程中ApplicationThread對象進行通信。
attachApplicationLocked方法會處理Provider, Activity, Service, Broadcast相應流程,調用ApplicationThreadProxy.bindApplication方法,通過Binder通信,傳遞給ApplicationThreadNative.onTransact方法。

app進程中,真正的邏輯在ActivityThread.bindApplication方法中。bindApplication方法的主要功能是依次向主線程發送消息H.SET_CORE_SETTINGS 和H.BIND_APPLICATION。后續創建Application,Context等。Activity的回調也會是通過Binder通信,然后發送不同消息處理。
.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容