Android開發 APP進程啓動原理

1、)首先Android系統啓動的時候會啓動一個應用程序管理服務PackageManagerService,這個服務主要是由SystemServer組件啓動的,同時還有ActivityManagerService服務。不過通過源碼你會發現在ActivityManagerService的構造函數中也初始化了BroadcastQueue、ProviderMap、ActiveServices、ActivityStackSupervisor,相信大家都已經猜出來了不錯這個服務就是用來管理Android四大組件的,而PackageManagerService服務是用來解析Apk的,其實主要解析的是AndroidManifest.xml文件,得到應用程序相關信息(如:Activity、Service、BroadcastReceiver和Content Provider等),完成應用程序的安裝過程。如果我們想要在Android桌面上看到這些應用程序,還需要有一個Home應用程序,負責從PackageManagerService服務中把這些安裝好的應用程序取出來,並以友好的方式在桌面上展現出來,例如以快捷圖標的形式。在Android系統中,負責把系統中已經安裝的應用程序在桌面中展現出來的Home應用程序就是Launcher了。

2、)桌面上icon圖標(快捷圖標)應用程序都是以Launcher(DEFAULT默認、HOME、PREFERENCE、LAUNCHER、BROWSABLE瀏覽器、GADGET內嵌非桌面)管理並啓動App的,點擊桌面icon圖標觸發Launcher的onItemClick事件,通知ActivityMangerService(所有Activity管家)啓動當前程序的MainActivity(通過當前應用程序包名+當前標識位主Launcher位置Activity)。如果屬於未啓動狀態,那麼通知爲該程序創建一個進程(uid + process屬性組合),通過Process.start()導入android.app.ActivityThread類,並且執行它的main函數:

1、在該進程main函數中先創建並綁定Looper對象;

2、然後創建ActivityThread實例調用它的attach函數啓動ActivityMangerService調用attachApplication傳遞參數ApplicationThread類型的Binder對象(mAppThread)進程間通信進入ApplicationThread進程創建Application,然後ApplicationThread調度scheduleLaunchActivity也就是MainActivity,接着使用Handler消息機制啓動Activity調度attach方法創建PhoneWindow、parentContent(即DecorView)根容器以及調用onCreate方法setContentView通過源碼分析即parentContent.addView,接着ApplicationThread調度scheduleResumeActivity也就是MainActivity的onResume生命週期還是通過Handler消息機制啓動把跟容器添加到窗口上wm.addView(parentView,1)窗口本身有一個RootView接着根View開始調用requestLayout從而調度performTraversals(執行遍歷一次performMeasure、performLayout、performDraw也就是View控制層測量,佈局,繪製)接下來的生命週期也就依次執行了;

3、進入loop消息循環了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章