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

2019-08-01 23:40

android系统启动流程

ArrayList中加入了这个数据,仅此而已。

4.2 进入ActivityStackSupervisor.resumeTopActivitiesLocked

这里最终执行的是resumeTopActivitiesLocked(null, null, null);

mStacks在setWindowManager的时候已经加入了mhomeStack,所以此时mStacks.size()为1,stack即为mHomeStack,进入分支stack.resumeTopActivityLocked(null);

4.3 进入ActivityStack.resumeTopActivityLocked

显然这时,topRunningActivityLocked一定返回null,程序回到mStackSupervisor.resumeHomeActivity(prev);prev为NULL。 注意:

这里的mStackSupervisor正是ActivityManagerService.main中初始化的

16 / 41

android系统启动流程

ActivityStackSupervisor,在ActivityStackSupervisor. setWindowManager 内部创建ActivityStack实例mHomeStack被创建的时候传进来

4.4 回到ActivityStackSupervisor.resumeHomeActivity。

mHomeStack这个空间被movetop,但是此时launcher的activity并没有运

行,.topRunningActivityLocked(null);自然还是null,mIsHomeActivityStarted为false,程序进入mProbeThread.start();。 注意:

mProbeThread是final变量,性质是线程,定义时就初始化,但是并没有start,所以mProbeThread.isAlive()必为false,mProbeThread.getState() != Thread.State.TERMINATED为true。

4.5 ActivityStackSupervisor.mProbeThread

mProbeThread为ActivityStackSupervisor的内部类,run方法给handler发出START_HOME_MSG消息。

17 / 41

android系统启动流程

4.6 ActivityStackSupervisor.mProbeHandler

mProbeHandler为私有final成员变量。他的工作只有一个就是调用ActivityServiceManger的startHomeActivityLocked,执行这一步后mIsHomeActivityStarted变为true。

特别注意:这一步是消息发送,可能存在调度问题而导致startHomeActivityLocked实际调用慢。前面已经分析过,ActivityStackSupervisor中的mService就是ActivityManagerService。

4.7 回到ActivityManagerService.startHomeActivityLocked

18 / 41

android系统启动流程

首先调用getHomeIntent构造一个intent为CATEGORY_HOME类型,

然后通过resolveActivityInfo函数向PackageManagerService查询Category类型为HOME的Activity,此时aInfo即luancher的ActivityInfo。

通过getProcessRecordLocked,进一步查询该app的执行情况,如果查不到则表明进程都没启动,如果app进程查到了但是instrumentationClass为空则表明activity未启动,此时调用mStackSupervisor.startHomeActivity(intent, aInfo);

4.8 ActivityStackSupervisor.startHomeActivity

传入startActivityLocked的参数只有intent和aInfo不为空,程序很容易判断进入 err = startActivityUncheckedLocked(r, sourceRecord, startFlags, true, options); r正是根据intent和ainfo创建的ActivityRecord,直到这时才有了实际的Activity准备启动,但是此时还没有加入到activityStack的栈顶。

19 / 41

android系统启动流程

4.9 ActivityStackSupervisor.startActivityUncheckedLocked

这个函数很长,仔细梳理并通过加打印,确认其会进入最后ActivityStack类的的startActivityLocked,而targetStack为之前创建的homestack。

特别注意:

doResume参数为true.,

newTask为true(因为启动方式为Intent.FLAG_ACTIVITY_NEW_TASK)

20 / 41


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

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

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

马上注册会员

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