Android测试用例执行线程和UI线程

本文探讨了Android测试用例的执行线程,指出测试用例在"Instr: android.test.InstrumentationTestRunner"线程中运行,而Activity运行在主线程(UI线程)。详细分析了InstrumentationTestRunner如何启动新线程执行测试,并通过源码解释了ActivityThread与UI线程的关系。
摘要由CSDN通过智能技术生成
在做Android的AsyncTask测试的时候,发现测试用例 在执行的时候是在一个名为“Instr: android.test.InstrumentationTestRunner”的线程中执行的,而activity是在main线程,个人这里也将其理解成UI线程。对此的原因做一些探究。
在Android测试工程的AndroidManifest.xml文件中,instrumentation标签的内容一般如下
  < instrumentation
         android:name = "android.test.InstrumentationTestRunner"
         android:targetPackage = "xxxxxx"  />
在进行测试的时候是通过android.test.InstrumentationTestRunner来运行的。这个类的父类是android.app.Instrumentation,也就是常说的Instrumentation类了。与Android中activity的生命周期类似,也是通过调用InstrumentationTestRunner的onCreate方法来开始测试的执行,onCreate中有下图所示的一部分代码
 
前面部分主要是环境解析,加载测试类和测试用例的一些操作,可以理解通过前面的操作在testSuiteBuilder中已经保存测试类和测试用例的全部信息,然后是通过getAndroidTestRunner方法获得一个运行测试用例的AndroidTestRunner对象,然后是对mTestRunner的一些设置。关键是最后的start方法的调用。这个方法是继承自android.app.Instrumentation类,代码如下图


在其中生成了一个新的InstrumentationThread线程对象,并且启动了这个线程,由于是通过android.test.InstrumentationTestRunner对象来调用此方法的,因此getClass().getName()的返回结果就是字符串"android.test.InstrumentationTestRunner",所以这个新线程名就是“Instr: android.test.InstrumentationTestRunner”。再看InstrumentationThread类的源代码,这是一个Instrumentation的内部类,如下图所示


设置线程的运行级别,然后调用onStart方法。由于是通过InstrumentationTestRunner对象进入的调用,并且在InstrumentationTestRunner中对Instrumentation的onStart方法进行了重写,所以调用的是InstrumentationTestRunner的onStart方法,所以这时对onStart方法的执行是在新生成的“Instr: android.test.InstrumentationTestRunner”线程中。onStart代码如下
      @Override
     public   void
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值