Small插件化源码分析--跳转流程

我系苍王,欢迎关注的源码分析的第三节

欢迎浏览我之前的文章,有兴趣可以参考一下,可以给个喜欢或者关注我的文章,谢谢。

[Android]如何做一个崩溃率少于千分之三噶应用app(9)-Small插件化

Small插件化源码分析--启动流程

Small插件化源码分析--热更流程


这一节主要介绍的是Actvity间跳转流程

三.跳转流程

1.很明显small的跳转是跨模块的。

我们可以很容易就找到Small使用的跳转函数,如Small.openUri

我们在第一节的时候有介绍过,Small也是使用通用Actvity占坑方法,来欺骗Android系统启动的。

makeUri会将跳转封装为baseUri和uriString

我们看一下openUri,他会调用ApplicalicationUtils.openUri

还是会调用context.startActvity的

2.但并不是这样就完了,ApkBundleLauncher里面有InstumentationWrapper,通过onCreate的方法调用,它会反射到sInstumentation这个变量。

阅读过Activity启动流程都会找到,会调用到Instumentation的execStartActivity的方法,然后才会代理模式代理到Native层运行。

在这里我们会使用wrapIntent的方法来包装Intent,这里会把取得realClazz,是真正启动Activity的包名和名字,将realClazz的放到addCategory里面用来传递。

调用dequeStubActivity的方法,来获取占坑的Activity的名字,以此来欺骗AndroidMaifest注册的检测。

 最后还是会通过反射来将该方法反射运行

3.通过包装欺骗后,很明显,当回调的时候,需要将Activity的信息替换回来(这里需要查看一下插件化的源码分析),我们之前有提示过有onCreate的时候sCallBack的反射替换

然后通过检测LAUNCH_ACTIVITY来检测启动的流程。

通过拆包unwrapIntent的方法从Category里面获取会真正的Activity名字

在sLoadedActivities里面获取会相关信息,然后反射替换Activity的信息

替换ActivityInfo的相关信息

这样就启动跳转完成了,而Activity将会享有本来的Instumentation和自定义的InstumentationWrapper全部生命周期里面的行为。


这一节就介绍到这里

下一节将会介绍InstumentaionWrapper究竟做了做了什么事情。

敬请期待!!!

推荐阅读更多精彩内容