logo资料库

android系统从systemserver开始的launcher启动详细流程.docx

第1页 / 共41页
第2页 / 共41页
第3页 / 共41页
第4页 / 共41页
第5页 / 共41页
第6页 / 共41页
第7页 / 共41页
第8页 / 共41页
资料共41页,剩余部分请下载后查看
android系统启动流程
——从systemserver开始的launcher
1 概述:
2 systemserver工作内容分析
2.1 SystemServer类简述
2.2 ServerThread类简述
3 ActivityManagerService工作内容分析
3.1 ActivityManagerService之main
3.1.1创建ActivityManagerService实例
3.1.2 创建ActivityThread实例,获取全局Context
3.1.3创建ActivityStackSupervisor实例
3.1.4调用startRunning
3.2 ActivityManagerService之setSystemProcess
3.3. ActivityManagerService之setWindowManager
3.4 ActivityManagerService之systemready
3.4.1 启动所有Persistent属性的APK
3.4.2 启动launcher
4 ActivityStackSupervisor启动launcher
4.1首先回顾一下ActivityStackSupervisor实例的初始化
4.2 进入ActivityStackSupervisor.resumeTopActivitiesL
4.3 进入ActivityStack.resumeTopActivityLocked
4.4 回到ActivityStackSupervisor.resumeHomeActivity。
4.5 ActivityStackSupervisor.mProbeThread
4.6 ActivityStackSupervisor.mProbeHandler
4.7 回到ActivityManagerService.startHomeActivityLock
4.8 ActivityStackSupervisor.startHomeActivity
4.9 ActivityStackSupervisor.startActivityUnchecke
4.10 ActivityStack.startActivityLocked
4.11 ActivityStackSupervisor.resumeTopActivitiesLo
4.12 ActivityStack.resumeTopActivityLocked
4.13 ActivityStackSupervisor.startSpecificActivity
4.14 ActivityStackSupervisor.realStartActivityLock
4.15 ActivityManagerService.startProcessLocked
5 Process类管理创建activity进程
5.1 Process.start:
5.2 Process.startViaZygote
5.3 zygoteSendArgsAndGetResult和 openZygoteSocketIf
6 ActivityThread线程类分析
6.1 ActivityThread.main分析
6.1.1创建了looper对象和本线程绑定。
6.1.2创建了ActivityThread对象实例
6.1.3进行attach回调
6.1.4 ActivityStackSupervisor.attachApplicationLoc
6.1.5 ActivityStackSupervisor. ensureActivitiesVis
6.2 ApplicationThread内部类
6.2.1 ActivityThread.ApplicationThread. scheduleLa
6.2.2 ActivityThread.ApplicationThread.scheduleRes
6.2.3 发出开机完成通知
7 总结
7.1 luancher启动流程总结
7.2集采项目速影luancher黑屏问题分析
android 系统启动流程 android 系统启动流程 ——从 systemserver 开始的 launcher 目录 1 概述:.....................................................................................................................................................2 2 systemserver 工作内容分析 .......................................................................................................... 4 2.1 SystemServer 类简述.......................................................................................................... 4 2.2 ServerThread 类简述...........................................................................................................4 3 ActivityManagerService 工作内容分析..................................................................................... 6 3.1 ActivityManagerService 之 main ................................................................................... 7 3.1.1 创建 ActivityManagerService 实例 .....................................................................7 3.1.2 创建 ActivityThread 实例,获取全局 Context.................................................8 3.1.3 创建 ActivityStackSupervisor 实例................................................................... 10 3.1.4 调用 startRunning ................................................................................................. 10 3.2 ActivityManagerService 之 setSystemProcess ....................................................... 11 3.3. ActivityManagerService 之 setWindowManager ................................................. 12 3.4 ActivityManagerService 之 systemready..................................................................12 3.4.1 启动所有 Persistent 属性的 APK....................................................................... 13 3.4.2 启动 launcher.........................................................................................................14 4 ActivityStackSupervisor 启动 launcher ..................................................................................15 4.1 首先回顾一下 ActivityStackSupervisor 实例的初始化............................................. 15 4.2 进入 ActivityStackSupervisor.resumeTopActivitiesLocked................................ 16 4.3 进入 ActivityStack.resumeTopActivityLocked ........................................................ 16 4.4 回到 ActivityStackSupervisor.resumeHomeActivity。.........................................17 4.5 ActivityStackSupervisor.mProbeThread ................................................................... 17 4.6 ActivityStackSupervisor.mProbeHandler ................................................................. 18 4.7 回到 ActivityManagerService.startHomeActivityLocked ................................... 18 4.8 ActivityStackSupervisor.startHomeActivity .............................................................19 4.9 ActivityStackSupervisor.startActivityUncheckedLocked..................................20 4.10 ActivityStack.startActivityLocked ............................................................................. 21 1 / 41
android 系统启动流程 4.11 ActivityStackSupervisor.resumeTopActivitiesLocked ........................................ 22 4.12 ActivityStack.resumeTopActivityLocked................................................................ 22 4.13 ActivityStackSupervisor.startSpecificActivityLocked .........................................24 4.14 ActivityStackSupervisor.realStartActivityLocked.................................................24 4.15 ActivityManagerService.startProcessLocked ....................................................... 25 5 Process 类管理创建 activity 进程.............................................................................................. 27 5.1 Process.start: ...................................................................................................................... 27 5.2Process.startViaZygote.................................................................................................... 28 5.3 zygoteSendArgsAndGetResult 和 openZygoteSocketIfNeeded .....................28 6 ActivityThread 线程类分析......................................................................................................... 30 6.1 ActivityThread.main 分析............................................................................................... 30 6.1.1 创建了 looper 对象和本线程绑定。................................................................... 30 6.1.2 创建了 ActivityThread 对象实例........................................................................ 30 6.1.3 进行 attach 回调 ..................................................................................................... 31 6.1.4 ActivityStackSupervisor.attachApplicationLocked ....................................34 6.1.5 ActivityStackSupervisor. ensureActivitiesVisibleLocked .........................34 6.2 ApplicationThread 内部类..............................................................................................35 6.2.1 ActivityThread.ApplicationThread. scheduleLaunchActivity .................35 6.2.2 ActivityThread.ApplicationThread.scheduleResumeActivity................ 37 6.2.3 发出开机完成通知.................................................................................................. 38 7 总结................................................................................................................................................... 40 7.1 luancher 启动流程总结.....................................................................................................40 7.2 集采项目速影 luancher 黑屏问题分析...........................................................................41 1 概述: android 系统启动到 zygote 后,系统就真正进入 java 世界了;而 zygote 启动的第一 个进程是 systemserver.而用户看到的第一个程序是 launcher. 本文要分析的正是从 systemserver 道 launcher 的启动流程.分析过程涉及到 PowerManagerService,ActivityManagerService, PackageManagerService, DisplayManagerService, WindowManagerService , InputManagerService ,ServiceManager 等一系列相关知识,必要的地方会做一些简单分析。这些 service 的详细分析,在另外的笔 记中再做阐述。 2 / 41
android 系统启动流程 流程图: 黑线:途径 1;蓝线:途径 2;红线:途径 3; 部分流程重叠。 显示 launcher: 1)WindowManagerService setAppVisibility 2) ActivityThread . ApplicationThread scheduleResumeActivity scheduleResumeActivity 设置 Activity resumed ActivityThread: main attach Y activity 进程已 启动 N activity resumed? N topRunningActivit y==NULL? N Y ActivityStack: resumeTopActivityLocked Persistent 属性 apk 启动: getPersistentApplications Process: start startViaZygote ActivityManagerService: 1)attachApplication 2)startProcessLocked 3)startHomeActivityLocked 4)systemready do nothing return Y ActivityStackSupervisor: 1)realStartActivityLocked 2)startSpecificActivityLocked 3)attachApplicationLocked 4)startHomeActivity 5)resumeHomeActivity mProbeThread mProbeHandler 6)resumeTopActivitiesLocked zygoteinit(zygotesocket): runSelectLoop systemserver: ServerThread.initAndLoop 3 / 41
android 系统启动流程 2 systemserver 工作内容分析 源代码路径: \frameworks\base\services\java\com\android\server\SystemServer.java systemserver 最主要的作用: 1)就是初始化 framework 层各种 service 和其对应的特定 servicemanager,并将他 们注册到全局 servicemanager 类,以便其他地方只需要通过 servicemanager. getService(String servicename)就可以取得该 service 的实例。 2)调用各 service 的 systemready 接口,启动 service。 这些 service 基本都是单例类,所以这种注册也是方便全局调用。 下面分析其代码流程 2.1 SystemServer 类简述 这里启动了 ServerThread 类,并调用其 initAndLoop 函数。 2.2 ServerThread 类简述 源代码路径: \frameworks\base\services\java\com\android\server\SystemServer.java 进入同样在 SystemServer.java 下的 ServerThread 类: 4 / 41
android 系统启动流程 5 / 41
android 系统启动流程 可见 systemsever 的工作基本都是在 ServerThread 内完成的. 其中我们所需要关注的是 ActivityManagerService,正是这个类的启动,最终完成了 launcher 的启动;下面接着分析 ActivityManagerService 在 ServerThread 内的 5 个主要 步骤。 3 ActivityManagerService 工作内容分析 这个分析,对应其在 ServerThread 内的 5 个步骤,重点是其如何 systemReady 完成 launcher 的启动。 从 上 面 systemserver 的 分 析 可 以 看 到 , systemserver 最 后 也 调 用 了 ActivityManagerService 的 systemReady,那么 systemReady 到底 是如何启动 launcher 的? 源代码路径: \frameworks\base\services\java\com\android\server\am\ActivityManagerService.j ava 6 / 41
android 系统启动流程 3.1 ActivityManagerService 之 main 回顾下 ActivityManagerService 在 systemserver 中的第一个动作: 下面进入 ActivityManagerService 的 main 方法: ActivityManagerService 的 main 方法完成以下几个事情: 3.1.1 创建 ActivityManagerService 实例 ActivityManagerService 实例是通过 AThread 这个内部类创建的;这里我们看下 AThread 是如何创建这个实例的。 AThread 是在其 run 方法中创建的 ActivityManagerService 实例,AThread. start 被执 行的时候,run 方法就被调用,从而完成创建 ActivityManagerService 实例。 7 / 41
android 系统启动流程 ActivityManagerService 在创建了实例后,self 函数就直接返回该实例: 3.1.2 创建 ActivityThread 实例,获取全局 Context 调用 ActivityThread 类的 systemMain 创建 ActivityThread 实例,再调用 getSystemContext 获得 context \frameworks\base\core\java\android\app\ActivityThread.java 这个 context 是 ActivityThread 下的全局 context,所有的上下文都继承于此。 8 / 41
分享到:
收藏