Activity自动化测试

  次阅读 作者:智能小宝 来源:互联网 2016-01-14 09:56 我要评论(0)

SDK中为我们提供了非常好的对Activity进行测试的方式,那么Activity的内部机制是如何支持的呢?比如如何在Activity的生命周期变化中加入测试代码?如何监控到Activity的各种变化?如何获得Activity启动的性能参数?如何自动向Activity发送按键消息以进行测试?带着这些问题,我们要再次深入Activity源码来一探究竟。

首先想到的就是,如果要想监控到Activity生命周期的变化,必然会在Create或Start等处有代码来进行处理,所以我们把重点放在Activity那近4000行代码中与此相关的函数部分。

遗憾的是在onCreate()、onStart()等处没有发现任何有效的线索,不过不要气馁,继续向下找。

在startActivityForResult()函数中,mInstrumentation.execStartActivity()一句让我们看到至少有一个mInstrumentation的对象受委托在启动Activity,这个委托是有可能加入监控动作的。

public void startActivityForResult(Intent intent, int requestCode) {

if (mParent == null) {

Instrumentation.ActivityResult ar =

mInstrumentation.execStartActivity(

this, mMainThread.getApplicationThread(), mToken, this,

intent, requestCode);

if (ar != null) {

mMainThread.sendActivityResult(

mToken, mEmbeddedID, requestCode, ar.getResultCode(),

ar.getResultData());

}

if (requestCode >= 0) {

mStartedActivity = true;

}

} else {

mParent.startActivityFromChild(this, intent, requestCode);

}

}

继续向下,在以perform开头的几个函数中,我们再次发现了对mInstrumentation对象的调用。例如performStart()函数。

final void performStart() {

mCalled = false;

mInstrumentation.callActivityOnStart(this);

if (!mCalled) {

throw new SuperNotCalledException(

"Activity " + mComponent.toShortString() +

" did not call through to super.onStart()");

}

}

到此为止,我们必须得对Instrumentation类进行深入了解了,方式有二种,一是通过SDK了解该类的功能和接口,二是直接看源码。如果二种方式都用也没有问题,先通过SDK,我们知道了该类是一个基类,会在我们自己的应用程序运行之前被系统实例化,以允许我们监控所有与系统的交互(太伟大了),实现的方式是通过在AndroidManifest.xml文件中加入<instrumentation> 标签。看来这个一定是我们想要找到的答案了,赶紧打开源码来学习一下吧。

整体上看,该类的接口主要有以下几类:对Activity监控对象的处理接口,Activity状态改变时的回调通知接口,生成Activity和Application的接口,向Activity发送事件通知的接口,性能处理的接口等。

下面我们就找几个典型的函数来看一下Instrumentation与Activity的交互机制。

先来看callActivityOnCreate()函数。

public void callActivityOnCreate(Activity activity, Bundle icicle) {

if (mWaitingActivities != null) {

synchronized (mSync) {

final int N = mWaitingActivities.size();

for (int i=0; i<N; i++) {

final ActivityWaiter aw = mWaitingActivities.get(i);

final Intent intent = aw.intent;

if (intent.filterEquals(activity.getIntent())) {

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...