一般的应用不太会用到instrumentation,所以网上对其介绍也比较少。

但因其强大的跟踪application及activity生命周期的功能,用于android 应用测试框架中,被做为基类使用。

instrumentation的官方文档:http://developer.android.com/intl/zh-cn/reference/android/app/Instrumentation.html

查看其提供的方法,比如:callActivityOnCreate,callApplicationOnCreate,newActivity,callActivityOnNewIntent 等基本上在application和activity的所有生命周期调用中,都会先调用instrumentation的相应方法。并且针对应用内的所有activity都生效。为程序员提供了一个强大的能力,有更多的可能性进入android app框架执行流程。

对于每一个android app来说,它的总入口都是ActivityThread::main. 每一个应用的进程都有一个ActivityThread对象,而每一个ActivityThread对象都有一个Instrumentation mInstrumentation;成员变量。mInstrumentation的初始化在ActivityThread::handleBindApplication函数中:

if(data.instrumentationName !=null) {

...

java.lang.ClassLoadercl= instrContext.getClassLoader();

mInstrumentation = (Instrumentation)

cl.loadClass(data.instrumentationName.getClassName()).newInstance();

...} else {

mInstrumentation =newInstrumentation();

}

自定义的instrumentation只能通过调用Context.startInstrementation或者命令行am instrument启动,这个过程会将目标进程杀死再重启(声明instrumention的应用与目标应用签名必需一致)。如果应用不是通过上述方式启动而是正常情况下(通过launcher或者startActivity)启动,会默认new 一个系统的Instrumentation.

如果某应用要自定义instrumentation且用于跟踪本应用内的application及activity生命周期,通过继承实现Instrumentation并反射修改ActivityThread.mInstrumentation的方法可以做到。以下是具体做法:

1、自定义Instrumentation

class MyInstrumentation extends Instrumentation {

...

};

2、反射调用修改ActivityThread.mInstrumentation

MyInstrumentation ins = new MyInstrumentation();

Class cls = Class.forName("android.app.ActivityThread"); // ActivityThread被隐藏了,所以通过这种方式获得class对象

Method mthd = cls.getDeclaredMethod("currentActivityThread", (Class[]) null); // 获取当前ActivityThread对象引用

Object currentAT = mthd.invoke(null, (Object[]) null);

Field mInstrumentation = currentAT.getClass().getDeclaredField("mInstrumentation");

mInstrumentation.setAccessible(true);

mInstrumentation.set(currentAT, ins); // 修改ActivityThread.mInstrumentation值

至此即可通过MyInstrumentation来跟踪应用内application及activity的生命周期。

android instrumentation 用法,关于android instrumentation的理解、使用相关推荐

  1. android组件用法说明,Android第三方控件PhotoView使用方法详解

    Android第三方控件PhotoView使用方法详解 发布时间:2020-10-21 15:06:09 来源:脚本之家 阅读:74 作者:zhaihaohao1 PhotoView的简介: 这是一个 ...

  2. android instrumentation 用法,Instrumentation的理解

    一般的应用不太会用到instrumentation,所以网上对其介绍也比较少. 但因其强大的跟踪application及activity生命周期的功能,用于android 应用测试框架中,被做为基类使 ...

  3. [深入理解Android卷二 全文-第四章]深入理解PackageManagerService

    由于<深入理解Android 卷一>和<深入理解Android卷二>不再出版,而知识的传播不应该因为纸质媒介的问题而中断,所以我将在CSDN博客中全文转发这两本书的全部内容 第 ...

  4. 深入理解 Android 卷I - 第8章 深入理解Surface系统

    原文地址:http://wiki.jikexueyuan.com/project/deep-android-v1/ 第8章  深入理解Surface系统 本章主要内容 ·  详细分析一个Activit ...

  5. [深入理解Android卷二 全文-第六章]深入理解ActivityManagerService

    由于<深入理解Android 卷一>和<深入理解Android卷二>不再出版,而知识的传播不应该因为纸质媒介的问题而中断,所以我将在CSDN博客中全文转发这两本书的全部内容 第 ...

  6. Android Intent 用法总结

    From:https://www.jianshu.com/p/67d99a82509b Android 中提供了 Intent 机制来协助应用间的交互与通讯,Intent 负责对应用中一次操作的动作. ...

  7. android:id = @+id 用法,@+id/android:list和@android:id/list的写法

    Android中的列表,当然也可以用ListView来完成所需要的功能,用法是一样的. 废话不说,来关键的. LiveActivity本身继承了关于List操作的众多接口,我们可以方便的重写这些操作中 ...

  8. [深入理解Android卷二 全文-第三章]深入理解SystemServer

    由于<深入理解Android 卷一>和<深入理解Android卷二>不再出版,而知识的传播不应该因为纸质媒介的问题而中断,所以我将在CSDN博客中全文转发这两本书的全部内容 第 ...

  9. Android.mk 用法介绍

    一个Android.mk file用来向编译系统描述你的源代码.具体来说:该文件是GNU Makefile的一小部分,会被编译系统解析一次或多次.你可以在每一个Android.mk file中定义一个 ...

最新文章

  1. 鹅厂机器狗,站起来了!
  2. Java 集合系列(4): LinkedList源码深入解析2
  3. 哲学家就餐(避免死锁)(多进程版)
  4. android像素鸟,像素鸟Flappy Bird
  5. 查询商品信息报错FreeMark template error
  6. 安装Vim,提示“Could not get lock......”
  7. 坡度土方计算案例_【攻略】如何解锁方格网法土方计算?
  8. 作为开发者不应该畏惧的8件事
  9. 平民级NER︱pycrfsuite的介绍与应用
  10. 3分钟tips:泛函中,什么是开映像定理?
  11. 使用scroll实现Elasticsearch数据遍历和深度分页
  12. 基于MATLAB中的GUI设计的钢琴界面设计并能发声
  13. 办理icp许可证对经营范围还有要求吗
  14. 远程医疗中使用AR眼镜,内窥镜,视频远程诊疗方案
  15. HTML中的语义化标签
  16. 关于自制utau软件,widegt,动态更改控件长度等等经验
  17. 摘自【北京迅为】itop-3568开发板快速启动手册 第二章 Windows安装串口终端
  18. r7 4800h安装linux,华硕天选(R7-4800H) u盘pe如何重装win7系统
  19. BoCloud博云完成近亿元B轮融资,向PaaS及自动化运维注入强大加速力
  20. MySQL 之留言板的功能的实现

热门文章

  1. Windows桌面暗水印方法与C++实现
  2. 2023NAR数据库特刊:单细胞数据库合辑
  3. onpaste事件的浅谈
  4. 腾讯通服务器查看消息记录,rtx怎么在服务端查看用户登录日志
  5. 如何转载文章(主要是自用)
  6. C语言,课程管理系统
  7. Windows8正式谢幕
  8. 钣金加工的工艺流程,根据钣金件结构的差异,工艺流程可各不相同
  9. MySQL——update 语句执行流程
  10. 【诗歌】爱你就像爱生命