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

2019-08-01 23:40

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.java

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

android系统启动流程

扩展一:为什么这里要创建一个ActivityThread线程?

ActivityThread类故名思议是处理activity生命周期内的活动的线程,

ActivityManagerService运行在systemserver进程内,为什么需要创建ActivityThread线程? 实际上systemserver.java下有一个startSystemUi,这个函数本身启动一个service处理了很多系统级的临时弹出消息,这些有一部分也处理为activity,他们的运行同样需要ActivityThread;同时其他aitivity的一些善后的工作也需要ActivityManagerService来处理;所以这个systemserver进程就需要 这么一个ActivityThread线程,换句话说,这个线程放在systemsever内创建也是可以的。ActivityManagerService实际需要的是ActivityThread下的全局conntext(即getSystemContext的结果).

扩展二: ActivityThread类是如何工作的? 这个知识点较多,放到后面再分析..

但是这里需要提前讲一下的是ActivityThread的基本原理和意义:

ActivityThread是所有应用层activity启动时所创建的进程所启动的专门管理activity生命周期事务的线程;有一个activity运行 就有一个进程,就有一个ActivityThread;

ActivityThread有一个main方法,这是app层activity创建该线程的入口,最后通过attach方法进行回调,通知上层进程和线程都创建起来了(你可以显示了)。 而ActivityManagerService是通过systemMain来创建的线程,进程则不需要创建了,因位他本来就是zygote拉起的systemserver进程的一部分。

可见,本质上是一样的,只是ActivityManagerService和app层activity创建线程的入口不同,权限不同。

以上其实就是所谓的android运行时环境,把进程的处理放在后台,普通java程序员根本不需要知道进程概念,只需要知道android环境就够了。

9 / 41

android系统启动流程

3.1.3创建ActivityStackSupervisor实例

记录到mStackSupervisor,ActivityStackSupervisor是启动launcher的直接起点,放到

后面讲.

3.1.4调用startRunning

这里的systemReady(null)不会被执行. ,这里完成初始化的参数值得注意: mTopComponent:栈顶Component为空 mTopAction:栈顶动作是: Intent.ACTION_MAIN mTopData:栈顶activity数据为空

10 / 41


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

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

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

马上注册会员

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