Activity启动流程

最近在学插件化相关的,要求启动一个没有安装的app中的activity(没有AndroidManifest注册),这就要求对代理模式和activity的启动流程有一定的了解。hook正常的activity启动流程。

一、先看源码,把流程弄出来。

a,首先当我们startActivity(xIntent)时.会调用Activity中的startActivity方法


b,这个方法调用自己的重载方法


c,由于上面传进来 options为null,所以进else,到这里startAcitity变成了startActivityForResult


d,继续点进去


e,重点为带箭头的部分,我们找到mInstrumentation这个类,并查看里面的execStartActivity方法


f,重点仍然是带箭头的部分,这里需要注意ActivityManagerNative是一个抽象类,所以具体的实现代码需要找他的子类AMS,下面我们去AMS中看这个startActivity方法


g,接着我们点进去看startActivityAsUser


h,这里mStackSupervisor字面意思是栈管理者,继续点进去看


这里解析activityInfo,参数等


最终调用startActivityLoked方法

i,点进这个方法看


做了很多的错误判断,


j,这里调用了startActivityUncheckedLocked再点进去看


这个方法里面,做了一些启动模式的处理


k,点进resumeTopActivitiesLocked方法


l,继续点进去看


m,继续看resumeTopActivityInnerLocked方法


n,这里调用startPausingLocked方法看样子是要onpause最上层的activity,点进去看


o,果然这里调用了schedulePauseActivity方法,继续去看。这里不能直接点进去,但是熟悉源码之后就会知道prev.app.thread就是ApplicationThread,也就是在ActvityThread的内部类。我们去找找看。

p,果然在activityThread中找到了


q,这里是一个判断,是否结束是发生finish消息,不结束就发送pasu消息。我们就去看H.PAUSE_ACTIVITY是怎么处理的,

H也是ActivityThread的内部类。


r,这里执行handlePauseActivity方法,进去看。


s,执行performPauseActivity方法。


t,在进去看


u,在进去看


Activity类中


至此启动另一个activity执行的第一个生命周期出现了。

接着再回到r步,ApplicationThread的handlePauseActivity方法,我们来找新的acitivy的启动流程。

1,进入handlePauseActivity方法了。


2.这次我们已经很熟悉了ActivityManagerNative.getDefault().就是AMS,我们直接去AMS找到这个方法


3,再点进去看


4,进入箭头指示的方法,


5,这一句是重点resumeTopActivitiesLocked,进去看


6,再进入resumeTopActivityLocked查看


7,再点进去


8,在resumeTopActivityInnerLocked这个方法的末尾,有这么一句。


9,再去看realStartActivityLocked方法


10,这里可以看出应该是去launchAcivity了。我们去ActivityThread中看看


11,设置各种值之后,发送消息,我们去H中看看,


12.进入handleLaunchActivity方法


13, 看到perfome就知道不远了,继续看


14,这里我们知道activity实例的创建是通过反射的,与oncreate生命周期无关,继续看


15.这里还创建context,attach,设置Theme,还是无关,继续看


16,看到了Activity的oncreate,继续。


17,到这里就调用了activity的oncrete生命周期。


18.onstart以及其他的生命周期都是类似的。

二、然后再总结一下细节的地方。

        首先darren大哥的总结https://www.jianshu.com/u/35083fcb7747

  • ** ActivityManagerService** 组件通信系统核心管理类 (ActivityManagerNative)IPC通信-Binder子类

  • ** ActivityStackSupervisor** 管理整个手机的Activity任务栈

  • ActivityStack Activity栈(任务栈)
  • ** PackageManagerService** 主要负责对系统的apk进行管理,不管是系统apk(/system/app),还是我们手工安装上去的,系统所有的apk都是由其管理的。       
  • ** ActivityThread** Activity的入口是onCreate方法,Android上一个应用的入口是ActivityThread。和普通的Java类一样有一个main方法。用于控制与管理一个应用进程的主线程的操作,包括管理与处理activity manager发送过来的关于activities、广播以及其他的操作请求





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值