在前面一篇文章中,我们分析了Android系统在启动时安装应用程序的过程,这些应用程序安装好之后,还需要有一个Home应用程序来负责把它们在桌面上展示出来,在Android系统中,这个默认的Home应用程序就是Launcher了,本文将详细分析Launcher应用程序的启动过程。
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_initandroid11系统更新包下载
函数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文件中:
view plain
1. public 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. thr.start();
8.
9. synchronized (thr) {
10. while (thr.mService == null) {
11. try {
12. thr.wait();
13. } catch (InterruptedException e) {
14. }
15. }
16. }
17.
18. ActivityManagerService m = thr.mService;
19. mSelf = m;
20. ActivityThread at = ActivityThread.systemMain();
21. mSystemThread = at;
22. Context context =&SystemContext();
23. m.mContext = context;
24. m.mFactoryTest = factoryTest;
25. m.mMainStack = new ActivityStack(m, context, true);
26.
27. m.mBatteryStatsService.publish(context);
28. m.mUsageStatsService.publish(context);
29.
30. synchronized (thr) {
31. thr.mReady = true;
32. ifyAll();
33. }
34.
35. m.startRunning(null, null, null, null);
36.
37. return context;
38. }
39.
40. ......
41. }
这个函数首先通过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中的应用程序信息取出来,然后以快捷图标的形式展示在桌面上,后面我们将会看到这个过程。
Step 9. ActivityManagerService.setSystemProcess
这个函数定义在frameworks/base/services/java/com/android/server/am/ActivityManagerServcie.java文件中:
view plain
1. public final class ActivityManagerService extends ActivityManagerNative
2. implements Watchdog.Monitor, BatteryStatsImpl.BatteryCallback {
3. ......
4.
5. public static void setSystemProcess() {
6. try {
7. ActivityManagerService m = mSelf;
8.
9. ServiceManager.addService("activity", m);
10. ServiceManager.addService("meminfo", new MemBinder(m));
11. if (MONITOR_CPU_USAGE) {
12. ServiceManager.addService("cpuinfo", new CpuBinder(m));
13. }
14. ServiceManager.addService("permission", new PermissionController(m));
15.
16. ApplicationInfo info =
17. PackageManager().getApplicationInfo(
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论