android系统从systemserver开始的launcher启动详细流程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 进⼊sumeTopActivitiesLocked (16)
4.3 进⼊sumeTopActivityLocked (16)
4.4 回到sumeHomeActivity。 (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)
4.sumeTopActivitiesLocked (22)
4.sumeTopActivityLocked (22)
4.13 ActivityStackSupervisor.startSpecificActivityLocked (24)
4.alStartActivityLocked (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的详细分析,在另外的笔记中再做阐述。
流程图:
⿊线:途径1;蓝线:途径2;红线:途径3;部分流程重叠。
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类:
简述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
3.1 ActivityManagerService之main
回顾下ActivityManagerService在systemserver中的第⼀个动作: