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 Y scheduleResumeActivity scheduleResumeActivity 设置Activity resumed ActivityThread: main attach activity进程已启动 N activity resumed? N N Y do nothing return ActivityStackSupervisor: topRunningActivity==NULL? Y 1)realStartActivityLocked 2)startSpecificActivityLocked 3)attachApplicationLocked ActivityStack: resumeTopActivityLocked 4)startHomeActivity 5)resumeHomeActivity mProbeThread mProbeHandler ActivityManagerService: 1)attachApplication 2)startProcessLocked 3)startHomeActivityLocked Persistent属性 apk启动: getPersistentApplications 6)resumeTopActivitiesLocked Process: start 4)systemready startViaZygote 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