插件开发Android知识Android开发

Small插件化源码分析--InstumentationWrap

2016-11-25  本文已影响316人  CangWang

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

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

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

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

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

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。

敬请期待!!!

上一篇下一篇

猜你喜欢

热点阅读