資源描述:
《Android系統(tǒng)默認Home應用程序(Launcher)的啟動過程源代》由會員上傳分享,免費在線閱讀,更多相關內容在工程資料-天天文庫。
1、在前面一篇文章中,我們分析了Android系統(tǒng)在啟動時安裝應用程序的過程,這些應用程序安裝好之后,還需要有一個Home應用程序來負責把它們在桌面上展示出來,在Android系統(tǒng)中,這個默認的Home應用程序就是Launcher了,本文將詳細分析Launcher應用程序的啟動過程。?????Android系統(tǒng)的Home應用程序Launcher是由ActivityManagerService啟動的,而ActivityManagerService和PackageManagerService一樣,都是在開機時由SystemServer組件啟動的,
2、SystemServer組件首先是啟動ePackageManagerServic,由它來負責安裝系統(tǒng)的應用程序,具體可以參考前面一篇文章Android應用程序安裝過程源代碼分析,系統(tǒng)中的應用程序安裝好了以后,SystemServer組件接下來就要通過ActivityManagerService來啟動Home應用程序Launcher了,Launcher在啟動的時候便會通過PackageManagerServic把系統(tǒng)中已經安裝好的應用程序以快捷圖標的形式展示在桌面上,這樣用戶就可以使用這些應用程序了,整個過程如下圖所示:點擊查看大圖????
3、?下面詳細分析每一個步驟。?????Step1.SystemServer.main?????這個函數定義在frameworks/base/services/java/com/android/server/SystemServer.java文件中,具體可以參考前面一篇文章Android應用程序安裝過程源代碼分析的Step1。?????Step2.?SystemServer.init1?????這個函數是一個JNI方法,實現在?frameworks/base/services/jni/com_android_server_SystemServ
4、er.cpp文件中,具體可以參考前面一篇文章Android應用程序安裝過程源代碼分析的Step2。?????Step3.?libsystem_server.system_init?????函數system_init實現在libsystem_server庫中,源代碼位于frameworks/base/cmds/system_server/library/system_init.cpp文件中,具體可以參考前面一篇文章Android應用程序安裝過程源代碼分析的Step3。?????Step4.?AndroidRuntime.callStatic
5、?????這個函數定義在frameworks/base/core/jni/AndroidRuntime.cpp文件中,具體可以參考前面一篇文章Android應用程序安裝過程源代碼分析的Step4。?????Step5.?SystemServer.init2?????這個函數定義在frameworks/base/services/java/com/android/server/SystemServer.java文件中,具體可以參考前面一篇文章Android應用程序安裝過程源代碼分析的Step5。?????Step6.?ServerThrea
6、d.run?????這個函數定義在frameworks/base/services/java/com/android/server/SystemServer.java文件中,具體可以參考前面一篇文章Android應用程序安裝過程源代碼分析的Step6。?????Step7.ActivityManagerService.main?????這個函數定義在frameworks/base/services/java/com/android/server/am/ActivityManagerServcie.java文件中:viewplain1.pu
7、blic?final?class?ActivityManagerService?extends?ActivityManagerNative??2.????????implements?Watchdog.Monitor,?BatteryStatsImpl.BatteryCallback?{??3.????......??4.??5.????public?static?final?Context?main(int?factoryTest)?{??6.????????AThread?thr?=?new?AThread();??7.???????
8、?thr.start();??8.??9.????????synchronized?(thr)?{??10.????????????while?(thr.mService?==?null)?{