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

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

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

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

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

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

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

三.跳转流程

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

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

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

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

makeUri会将跳转封装为baseUri和uriString

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


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

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

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

还是会调用context.startActvity的

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

替换ActivityInfo的相关信息

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

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

这一节就介绍到这里

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

敬请期待!!!

    原文作者:Android源码分析
    原文地址: https://juejin.im/entry/587ee8eb128fe10067e98f26
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞