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

2019-08-01 23:40

android系统启动流程

3.2 ActivityManagerService之setSystemProcess

回顾下ActivityManagerService在systemserver中的第二个动作:

下面看下setSystemProcess的实现

Context.ACTIVITY_SERVICE在

\\frameworks\\base\\core\\java\\android\\content\\Context.java中的定义:

则其他地方可以通过ServiceManager.getService(\或

Context.ACTIVITY_SERVICE*/)来使用ActivityManagerService的单例mSelf。

另外framework-res.apk的包名是android,可以查看\\frameworks\\base\\core\\res\\下的Android.mk和AndroidManifest.xml。

11 / 41

android系统启动流程

3.3. ActivityManagerService之setWindowManager

回顾下ActivityManagerService在systemserver中的第4个动作: (第三个动作是installSystemProviders,偏离主题太远,跳过)

这样一来ActivityManagerService和ActivityStackSupervisor都得到了全局WindowManagerService的实例.

3.4 ActivityManagerService之systemready

回顾下ActivityManagerService在systemserver中的第5个动作:

systemready方法在ActivityManagerService的main方法中调用startRunning的时候被调用了一次,但是并没有执行,所以真正执行systemready还是要按看这里。 下面分析systemready的具体实现

12 / 41

android系统启动流程

3.4.1 启动所有Persistent属性的APK

进入\\frameworks\\base\\services\\java\\com\\android\\server\\pm\\PackageManagerService.java:

这个函数将遍历所有apk,具备Persistent属性,且当前不是安全模式启动,或者这个apk同时是system属性,就会被load加入list列表

13 / 41

android系统启动流程

回到ActivityManagerService.java看下addAppLocked如何拉起这些apk的进程:

3.4.2 启动launcher

调用mStackSupervisor.resumeTopActivitiesLocked();真正开始启动luancher. 注意如果luancher具备了persistent属性,则显然luancher的进程已经先于activity的调用被拉起来了。

这里产生了一个问题:

mStackSupervisor.resumeTopActivitiesLocked()这个动作在拉起所有persistent属性的apk之后,如果luancher也具备这个属性,是不是意味着luancher的进程一定会先于后面这个动作先启动?

答案是不一定,这里先解答一下。启动进程的startProcessLocked是通过socket通讯去通知底层zygote进程创建子进程,而这个通知发出后,该函数就直接返回了,连执行结果都不需要等待,所以下面到底何时能创建这个子进程,要看子进程有多少,排在第几位,何时socket得到响应。所以不排除,真正启动luancher进程的动作比后面这个mStackSupervisor.resumeTopActivitiesLocked要慢。

14 / 41

android系统启动流程

4 ActivityStackSupervisor启动launcher

相关源代码路径:

\\frameworks\\base\\services\\java\\com\\android\\server\\am\\ActivityStackSupervisor.java

\\frameworks\\base\\services\\java\\com\\android\\server\\am\\ ActivityStack.java

4.1首先回顾一下ActivityStackSupervisor实例的初始化

1) ActivityStackSupervisor实例构造:

systemserver调用ActivityManagerService的main,后者在最后创建了ActivityStackSupervisor实例 ActivityManagerService.main

ActivityStackSupervisor的构造函数:

这里ActivityStackSupervisor在构造时记录了ActivityManagerService创建的service实例,全局context,和looper.

2) setWindowManager设置窗口管理

systemserver自己创建了WindowManagerService实例:

systemserver调用ActivityManagerService的setWindowManager,后者则内部调用了ActivityStackSupervisor的setWindowManager ActivityManagerService. setWindowManager:

ActivityStackSupervisor. setWindowManager:

注意这里不仅仅是记录了这个全局的WindowManagerService,还创建了一个home属性的activity栈空间,mHomeStack,并加入到mStacks,但这里仅仅是mStacks这个

15 / 41


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

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

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

马上注册会员

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