Jimmy Chen

A Programmer

基于Android 9之应用冷启动过程分析(一)

  这次会先开始分析应用冷启动流程,即在系统中还没有对应的应用进程的情况下,点击应用在Launcher上图标到应用加载起来的一系列过程。下面直接开始进行分析:

点击Launcher上的应用图标

  在Launcher启动的时候会在桌面创建应用的图标,同时通过设置ItemClickHandler监听桌面图标的点击事件,当点击桌面应用图标的时候就会调用ItemClickHandler.onClick方法。下面用一张流程图简单说明一下吧,具体代码大家可以跟着流程图走:

《基于Android 9之应用冷启动过程分析(一)》

根据上面的流程图可以知道,在Launcher中,最后会调用到Activity.java中的startActivity,下面我们接着startActivity分析。

Android框架处理流程

上面最后调用到Instrumentation的execStartActivity方法,虽然说Instrumentation是一个单元测试框架,但是Activity、Application的启动都会用到Instrumentation,下面接着看

这里,mActivityMonitors是ActivityMonitor的一个集合,ActivityMonitor是用来监控应用中的活动,可以监控监控应用中的一些意图,一般用在单元测试过程中对应用的状态进行监控。

上面最后一部分是通过mActivityStartController对象进行操作。我们看看obtainStarter完成的工作,首先要了解的是,在调用new ActivityStartController对象的时候,也会new DefaultFactory对象赋值给成员变量mFactory,

从上面的代码可以看到obtainStarter最后获取到的是一个ActivityStarter对象,所以在startActivityAsUser中,最后的setCaller、setMayWait、execute等等操作都是基于ActivityStarter对象的。

紧接着startActivityAsUser分析,最后调用的是ActivityStarter的execute方法

下面直接开始看startActivityMayWait方法,startActivityMayWait内容比较多,这里做简要分析:

上面有调用到ActivityStackSupervisor类中的两个方法:resolveIntent和resolveActivity,下面做简单分析。

resolveIntent && resolveActivity

先看resolveIntent

OK,resolveIntent相关代码就看到这里,resolveIntent主要是确定和发过来的intent、resolvedType和flags相关的ResolveInfo有哪些,再从中选择最符合的ResolveInfo,返回给调用者。

后看resolveActivity

OK,这篇分析到这里,上面我们分析到startActivityMayWait最后会调用startActivity来启动Activity,下一篇我会接着startActivity继续进行分析。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注