活动启动流程梳理+插件化

版权声明:有些文章写的很随意,那是仅作为个人记录的文章,建议直接关掉,多看一秒亏一秒 https://blog.csdn.net/qq_36523667/article/details/82750647

带着3个问题:

1.Binder类搞清楚

2.怎么回调的

3.插件化怎么搞的

流程:

点击Launcher,Launcher.AMN.singleton=代理AMS某接口,AMS通过Socket到Zygote,Zygote.fork,Zygote通过Socket到新进程,新进程.AMN.singleton=代理AMS某接口,bindApplication,AMS.某东西=新进程ApplicationThread,发消息。。。

1.Binder类你搞清楚了没

客户端/AMS

客户端的ApplicationThread是AMS要找到的东西,在AMS里有一个接口一致的代理类;

客户端的AMN.singleton是AMS的某个接口

就是说,ApplicationThread是AMS能够发现你的东西;

AMS.singleton是AMS中的某个接口,也是我们发现AMS的东西;

互相可以调用对方的方法。

2.怎么回调活动生命周期的?

这个问题是上个问题的基础。

拿到AMN.singleton,走到AMS,然后AMS会拿到ApplicationThread的代理,然后回调上一个活动的pause,再就不用再从这个进程回到AMS进程了。只不过是AMS分了一些时间片出去到本进程中,在运行本进程代码的时候,AMS是挂起的,然后本进程代码执行完了,AMS的代码继续跑。

然后经过一些列组件:ActivityStarter等,管理新活动的生命周期,同样也是用对应进程的ApplicationThread代理类,去操控。然后代理ApplicationThread.某方法,AMS就没代码了,所有东西就运行在本进程了。ApplicationThread开始onCreate、onStart、onResume。后面的我就没细看了,可能是等本进程代码执行完,AMS继续搞定上个活动的生命周期,也可能是AMS没代码了,然后本进程通过AMS.singleton去调用AMS某些方法。前者可能性大一些,因为一个活动启动一个另一个活动是一个完整的流程。

这就是AMS如何管理活动生命周期的原理。

3.插件化

在AMS.startActivity时替换已注册的活动,在H处理消息的时候,替换成真实的活动。

4.Instrumentation、ActivityStarter等有啥用,啥顺序?

Instrumentation可以认为是活动的一层简单的wrapper,用于管理活动的生命周期。然后这里会AMN.singleton走到AMS。然后是ActivityStarter为活动找到合适的栈,ActivityStackSupervisor栈的管理者,ActivityStack栈。然后回来的时候,ApplicationThread->H,随后也会回调Instrumentation。

猜你喜欢

转载自blog.csdn.net/qq_36523667/article/details/82750647
今日推荐