Small插件化源码分析--InstumentationWrap
我系苍王,欢迎关注的源码分析的第四节
欢迎浏览我之前的文章,有兴趣可以参考一下,可以给个喜欢或者关注我的文章,谢谢。
[Android]如何做一个崩溃率少于千分之三噶应用app(9)-Small插件化
四.InstumentationWrapper生命周期
什么是Instrumentation?
Instrumentation是执行application instrumentation代码的基类。当应用程序运行的时候instrumentation处于开启,Instrumentation将在任何应用程序运行前初始化,可以通过它监测系统与应用程序之间的交互。Instrumentation implementation通过的AndroidManifest.xml中的标签进行描述。
Instrumentation似乎有些类似与window中的“钩子(Hook)函数”,在系统与应用程序之间安装了个“窃听器”。
这个类的作用非常重要,它是创建Activity,Application,等组件的一个分水岭,简单的说,它是ActivityThread的一个管家吧。
下面说一下Small里面替换了Instumentation的处理
1.execStartActivity用于启动替换已经占坑的Activity,通过wrapIntent来包装intent
熟悉Activity启动流层,应该都有看到Instumentation这个类中的execStartActivity用于调用Native层去启动Activity的。
在nativite层最终进入前hook掉启动接口的意义在于,避免framework层系统的命名检查。
2.callActivityOnCreate这个是Activity调用OnCreate调用的系统流程
applyActivityInfo是用来恢复Activity的一些转屏和键盘状态
sHostInstumentation是原来反射前的Instumentation,依然是需要原来Instumentation调用流程的
最后需要反射我们的自己的sBundleInstumentation到系统mInstumentation属性里面
3.callActivityOnStop暂停的时候,会调用检测是否更新,如果需要更新,通过遍历process来封装到一个列表里面,去kill掉每个process。
4.callActivityOnDestroy对应的是onDestroy流程
inqueueStuActivity来解绑占坑Activity和映射的真实Activity的关系
5.设置占坑Activity和真实Activity的关系
关系的设定是在ActivityThreadHandlerCallback里面标志Activity是否在用
mStubQueue是用来记录占坑Activity和真实Activity的关系。
Small InstumentationWrapper作用用来替换占坑和真实Activity的转换,还有Activity的生命周期的提供调整。
这节到到这里,
下一节将会介绍真正实现Small的核心代码ReflectAccelerator。
敬请期待!!!