Android系统默认Home应用程序Launcher的启动过程源代码分析.docx

上传人:b****3 文档编号:2220489 上传时间:2022-10-28 格式:DOCX 页数:24 大小:202.36KB
下载 相关 举报
Android系统默认Home应用程序Launcher的启动过程源代码分析.docx_第1页
第1页 / 共24页
Android系统默认Home应用程序Launcher的启动过程源代码分析.docx_第2页
第2页 / 共24页
Android系统默认Home应用程序Launcher的启动过程源代码分析.docx_第3页
第3页 / 共24页
Android系统默认Home应用程序Launcher的启动过程源代码分析.docx_第4页
第4页 / 共24页
Android系统默认Home应用程序Launcher的启动过程源代码分析.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

Android系统默认Home应用程序Launcher的启动过程源代码分析.docx

《Android系统默认Home应用程序Launcher的启动过程源代码分析.docx》由会员分享,可在线阅读,更多相关《Android系统默认Home应用程序Launcher的启动过程源代码分析.docx(24页珍藏版)》请在冰豆网上搜索。

Android系统默认Home应用程序Launcher的启动过程源代码分析.docx

Android系统默认Home应用程序Launcher的启动过程源代码分析

     在前面一篇文章中,我们分析了Android系统在启动时安装应用程序的过程,这些应用程序安装好之后,还需要有一个Home应用程序来负责把它们在桌面上展示出来,在Android系统中,这个默认的Home应用程序就是Launcher了,本文将详细分析Launcher应用程序的启动过程。

     Android系统的Home应用程序Launcher是由ActivityManagerService启动的,而ActivityManagerService和PackageManagerService一样,都是在开机时由SystemServer组件启动的,SystemServer组件首先是启动ePackageManagerServic,由它来负责安装系统的应用程序,具体可以参考前面一篇文章Android应用程序安装过程源代码分析,系统中的应用程序安装好了以后,SystemServer组件接下来就要通过ActivityManagerService来启动Home应用程序Launcher了,Launcher在启动的时候便会通过PackageManagerServic把系统中已经安装好的应用程序以快捷图标的形式展示在桌面上,这样用户就可以使用这些应用程序了,整个过程如下图所示:

点击查看大图

     下面详细分析每一个步骤。

     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_SystemServer.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

     这个函数定义在frameworks/base/core/jni/AndroidRuntime.cpp文件中,具体可以参考前面一篇文章Android应用程序安装过程源代码分析的Step4。

     Step5. SystemServer.init2

     这个函数定义在frameworks/base/services/java/com/android/server/SystemServer.java文件中,具体可以参考前面一篇文章Android应用程序安装过程源代码分析的Step5。

     Step6. ServerThread.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文件中:

viewplain

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 = at.getSystemContext();  

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.            thr.notifyAll();  

33.        }  

34.  

35.        m.startRunning(null, null, null, null);  

36.  

37.        return context;  

38.    }  

39.  

40.    ......  

41.}  

     这个函数首先通过AThread线程对象来内部创建了一个ActivityManagerService实例,然后将这个实例保存其成员变量mService中,接着又把这个ActivityManagerService实例保存在ActivityManagerService类的静态成员变量mSelf中,最后初始化其它成员变量,就结束了。

     Step8. PackageManagerService.main

     这个函数定义在frameworks/base/services/java/com/android/server/PackageManagerService.java文件中,具体可以参考前面一篇文章Android应用程序安装过程源代码分析的Step7。

执行完这一步之后,系统中的应用程序的所有信息都保存在PackageManagerService中了,后面Home应用程序Launcher启动起来后,就会把PackageManagerService中的应用程序信息取出来,然后以快捷图标的形式展示在桌面上,后面我们将会看到这个过程。

     Step9. ActivityManagerService.setSystemProcess

     这个函数定义在frameworks/base/services/java/com/android/server/am/ActivityManagerServcie.java文件中:

viewplain

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.                mSelf.mContext.getPackageManager().getApplicationInfo(  

18.                "android", STOCK_PM_FLAGS);  

19.            mSystemThread.installSystemApplicationInfo(info);  

20.  

21.            synchronized (mSelf) {  

22.                ProcessRecord app = mSelf.newProcessRecordLocked(  

23.                    mSystemThread.getApplicationThread(), info,  

24.                    info.processName);  

25.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1