Android系統的Home應用程序Launcher是由ActivityManagerService啟動的,而ActivityManagerService和PackageManagerService壹樣,都是在開機時由SystemServer組件啟動的,SystemServer組件首先是啟動ePackageManagerServic,由它來負責安裝系統的應用程序,具體可以參考前面壹篇文章Android應用程序安裝過程源代碼分析,系統中的應用程序安裝好了以後,SystemServer組件接下來就要通過ActivityManagerService來啟動Home應用程序Launcher了,Launcher在啟動的時候便會通過PackageManagerServic把系統中已經安裝好的應用程序以快捷圖標的形式展示在桌面上,這樣用戶就可以使用這些應用程序了,整個過程如下圖所示:
下面詳細分析每壹個步驟。
Step 1. SystemServer.main
這個函數定義在frameworks/base/services/java/com/android/server/SystemServer.java文件中,具體可以參考前面壹篇文章Android應用程序安裝過程源代碼分析的Step 1。
Step 2.?SystemServer.init1
這個函數是壹個JNI方法,實現在?frameworks/base/services/jni/com_android_server_SystemServer.cpp文件中,具體可以參考前面壹篇文章Android應用程序安裝過程源代碼分析的Step 2。
Step 3.?libsystem_server.system_init
函數system_init實現在libsystem_server庫中,源代碼位於frameworks/base/cmds/system_server/library/system_init.cpp文件中,具體可以參考前面壹篇文章Android應用程序安裝過程源代碼分析的Step 3。
Step 4.?AndroidRuntime.callStatic
這個函數定義在frameworks/base/core/jni/AndroidRuntime.cpp文件中,具體可以參考前面壹篇文章Android應用程序安裝過程源代碼分析的Step 4。
Step 5.?SystemServer.init2
這個函數定義在frameworks/base/services/java/com/android/server/SystemServer.java文件中,具體可以參考前面壹篇文章Android應用程序安裝過程源代碼分析的Step 5。
Step 6.?ServerThread.run
這個函數定義在frameworks/base/services/java/com/android/server/SystemServer.java文件中,具體可以參考前面壹篇文章Android應用程序安裝過程源代碼分析的Step 6。
Step 7. ActivityManagerService.main
這個函數定義在frameworks/base/services/java/com/android/server/am/ActivityManagerServcie.java文件中:
[java]?view plaincopy
public?final?class?ActivityManagerService?extends?ActivityManagerNative?
implements?Watchdog.Monitor,?BatteryStatsImpl.BatteryCallback?{?
......?
public?static?final?Context?main(int?factoryTest)?{?
AThread?thr?=?new?AThread();?
thr.start();?
synchronized?(thr)?{?
while?(thr.mService?==?null)?{?
try?{?
thr.wait();?
}?catch?(InterruptedException?e)?{?
}?
}?
}?
ActivityManagerService?m?=?thr.mService;?
mSelf?=?m;?
ActivityThread?at?=?ActivityThread.systemMain();?
mSystemThread?=?at;?
Context?context?=?at.getSystemContext();?
m.mContext?=?context;?
m.mFactoryTest?=?factoryTest;?
m.mMainStack?=?new?ActivityStack(m,?context,?true);?
m.mBatteryStatsService.publish(context);?
m.mUsageStatsService.publish(context);?
synchronized?(thr)?{?
thr.mReady?=?true;?
thr.notifyAll();?
}?
m.startRunning(null,?null,?null,?null);?
return?context;?
}?
......?
}?
這個函數首先通過AThread線程對象來內部創建了壹個ActivityManagerService實例,然後將這個實例保存其成員變量mService中,接著又把這個ActivityManagerService實例保存在ActivityManagerService類的靜態成員變量mSelf中,最後初始化其它成員變量,就結束了。
Step 8.?PackageManagerService.main
這個函數定義在frameworks/base/services/java/com/android/server/PackageManagerService.java文件中,具體可以參考前面壹篇文章Android應用程序安裝過程源代碼分析的Step 7。執行完這壹步之後,系統中的應用程序的所有信息都保存在PackageManagerService中了,後面Home應用程序Launcher啟動起來後,就會把PackageManagerService中的應用程序信息取出來,然後以快捷圖標的形式展示在桌面上,後面我們將會看到這個過程。