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

2019-08-01 23:40

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


android系统从systemserver开始的launcher启动详细流程.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:建设项目安全预评价报告 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: