Instrumentation安卓官方简介(个人认为是HighLevel抽象出来的最简介明了的阐述)

官方连接:http://developer.android.com/tools/testing/testing_android.html中间Instrumentation段落

(百度出来的Instrumentation的阐述大部分不是经过阉割就是过于冗长,看得人云里雾去的,此文翻译了官方的简介,从高层把Instrumentation框架做的阐述,以Q&A的思路说明白了究竟Instrumentation是怎么一回事。希望能对Instrumentation的初学者有所帮助)

Instrumentation

Android instrumentation is a set of control methods or "hooks" in the Android system. These hooks control an Android component independently of its normal lifecycle. They also control how Android loads applications.

Android instrumentation是Android系统里面的一套控制方法或者”钩子“。这些钩子可以在正常的生命周期(正常是由操作系统控制的)之外控制Android控件的运行。它们同时可以控制Android如何加载应用程序。

Normally, an Android component runs in a lifecycle determined by the system. For example, an Activity object‘s lifecycle starts when the Activity is activated by an Intent. The object‘s onCreate() method
is called, followed by onResume(). When the user starts another application, the onPause() method is called.
If the Activity code calls the finish() method, theonDestroy() method is called. The Android framework API does
not provide a way for your code to invoke these callback methods directly, but you can do so using instrumentation.

正常来说,一个Android控件运行的生命周期是由操作系统决定的。比如,一个Activity对象的生命周期开始于被一个Intent启动的时候,这时候该Activity对象的onCreate()方法就会被调用,紧跟着就是onResume();当用户启动另外一个应用的时候,该Activity的onPause()方法就会被调用;如果该Activity的代码调用了finish()方法,那么onDestroy()方法就会被调用。

Android的API框架并没有为你的代码提供一种方法去直接调用这些回调函数,但是通过instrumentation你就可以做到这一点。

Also, the system runs all the components of an application into the same process. You can allow some components, such as content providers, to run in a separate process, but you can‘t force an application to run in the same process as another application
that is already running.

再者,操作系统把一个应用的所有控件都运行在同一个进程里面。你可以允许一些(特别的)控件运行在不同的进程中,比如content providers,但是你没办法把一个应用和另外一个已经在运行的应用运行在同一个进程里面。

With Android instrumentation, though, you can invoke callback methods in your test code. This allows you to run through the lifecycle of a component step by step, as if you were debugging the component. The following test code snippet demonstrates how to
use this to test that an Activity saves and restores its state:

如果使用了instrumentation,你就可以在你的测试代码中调用这些回调函数。这将允许你就像在调试该控件一样一步一步的把该控件的整个生命周期跑个遍。以下代码片段将会演示如何使用instrumentation去测试控制一个Activity保存和恢复其状态的:

    // Start the main activity of the application under test
    mActivity = getActivity();

    // Get a handle to the Activity object‘s main UI widget, a Spinner
    mSpinner = (Spinner)mActivity.findViewById(com.android.example.spinner.R.id.Spinner01);

    // Set the Spinner to a known position
    mActivity.setSpinnerPosition(TEST_STATE_DESTROY_POSITION);

    // Stop the activity - The onDestroy() method should save the state of the Spinner
    mActivity.finish();

    // Re-start the Activity - the onResume() method should restore the state of the Spinner
    mActivity = getActivity();

    // Get the Spinner‘s current position
    int currentPosition = mActivity.getSpinnerPosition();

    // Assert that the current position is the same as the starting position
    assertEquals(TEST_STATE_DESTROY_POSITION, currentPosition);

The key method used here is getActivity(),
which is a part of the instrumentation API. The Activity under test is not started until you call this method. You can set up the test fixture in advance, and then call this method to start the Activity.

这里用到的关键方法是instrumentation API里面的getActivity(),该被测的Activity在你没有调用此方法的时候是不会启动的。你也可以先把测试需要的环境配置好,然后再调用此方法来启动该Activity。

Also, instrumentation can load both a test package and the application under test into the same process. Since the application components and their tests are in the same process, the tests can invoke methods in the components, and modify and examine fields
in the components.

同时,instrumentation可以把测试包和被测应用加载到同一个进程中运行。既然各个控件和测试代码都运行在同一个进程中了,测试代码当然就可以调用这些控件的方法了,同时修改和验证这些控件的一些项也不在话下了。

时间: 2024-10-12 12:36:16

Instrumentation安卓官方简介(个人认为是HighLevel抽象出来的最简介明了的阐述)的相关文章

AndroidOrientation Sensor(方向传感器),新的替代方法详解(安卓官方提供)

本文将带大家去解读下安卓官方关于方向传感器数据,提供的新方法.熟悉手机传感器开发的朋友对这段代码一定不会陌生吧. sm.registerListener(this, sm.getDefaultSensor(Sensor.TYPE_ORIENTATION), SensorManager.SENSOR_DELAY_NORMAL); sm.registerListener(this, sm.getDefaultSensor(Sensor.TYPE_GRAVITY), 在高版本的安卓中,Sensor.T

安卓官方开发文档API GUIDE(1.1)Application Fundamentals 应用基础

Application Fundamentals Android apps are written in the Java programming language. The Android SDK tools compile your code-along with any data and resource files-into an APK: an Android package, which is an archive file with an .apk suffix. One APK

Zabbix 2.4 官方配置手册中文翻译(一):目录简介

前言 Zabbix 2.4的内容分为以下几个部分,并且有目录小节的方式,可以方便快速跳转到您感谢的板块,当您跳转到相应的章节之后,请展开目录树仔细查看该章节包含的内容,不要错过一些有用的信息. 目录 1.简介:提供了有关当前的zabbix软件的一般信息.阅读这部分会让你更好的了解zabbix. 2.ZABBIX概念:这部分解释的zabbix使用,并提供有关的zabbix组件的详细信息的术语. 3.安装:4.启动:5. ZABBIX Appliance:关于zabbix的安装和启动初始化,这部分可

[转载]安卓动态调试七种武器之长生剑 - Smali Instrumentation

本文转载自: http://drops.wooyun.org/papers/6045 0x00 序 随着移动安全越来越火,各种调试工具也都层出不穷,但因为环境和需求的不同,并没有工具是万能的.另外工具是死的,人是活的,如果能搞懂工具的原理再结合上自身的经验,你也可以创造出属于自己的调试武器.因此,笔者将会在这一系列文章中分享一些自己经常用或原创的调试工具以及手段,希望能对国内移动安全的研究起到一些催化剂的作用. 目录如下: 安卓动态调试七种武器之长生剑 - Smali Instrumentati

【腾讯Bugly干货分享】安卓单元测试:What, Why and How

本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57d28349101cd07a5404c415 Dev Club 是一个交流移动开发技术,结交朋友,扩展人脉的社群,成员都是经过审核的移动开发工程师.每周都会举行嘉宾分享,话题讨论等活动. 本期,我们邀请了蘑菇街 Android 开发工程师——小创,为大家分享<安卓单元测试:What, Why and How>. 分享内容简介: 单元测试一直是软件开发过程中保证软件质量.提高

Android的基本世界观——系统简介,组件逻辑及其他

前言 作为一个有半年余Android Developing折腾经验的Android Developer(为什么不说"开发经验"呢?因为我仔细想了想,我还没有独立地做出一个完善美观且有使用价值的应用.),要系统地学习安卓平台的基本开发技能,那么第一步,了解并熟识Android的基本世界观,应该就是十分必要的了.以前这方面的知识体系不成系统,比较破碎零散,故借此文稍作整理. 我认为在进入任何一个比较复杂的知识技能体系之前,都需要先用基本世界观来热热身.对于高中物理而言,初中数学物理知识就形

安卓开发经验分享:资源、UI、函数库、测试、构建一个都不能少

除了高超的武艺,每位黑忍者还需要装备最好的武器.在软件开发的世界里,好的工具能让我们的生活变得更轻松,在更短的时间里写出更棒的代码. 时光回到2008年,那时安卓还很年轻.只有几个相关的博客和谷歌官方的几个应用开发教程,没有函数库也没有代码生成器,甚至连成熟的设计模式也没有(除了OOP和一些Java实践).今非昔比,我们已经有了一个成熟的OS.很棒的开发工具.稳定的Eclipse插件和其他IDE,数不清的开发书籍和相关的技术博客. 这里,我想分享自己在开发安卓应用时用到的工具和一些技巧,希望可以

Android7_安卓的知识体系梳理

最近梳理了一下安卓的知识体系,先构建一个整体性的认知,也作为以后的学习路线的依据. [一.从原理角度出发]1.Activity生命周期和启动模式2.View的事件体系与工作原理3.四大组件的工作过程4.JNI和NDK编程 //5.线程与线程池 //多线程编程.线程同步问题.6.消息机制 //主要是讲Handler.MessageQueue,继续深入挖掘底层原理7.IPC机制 //序列化.Binder.AIDL的使用.选择合适的IPC(RPC场景).哪些分类(Bundle.Messager.文件共

Cocos2d-x 3.x 如何编译成安卓程序

1.安装JDK 2.安装eclipse,安卓官方现在不提供eclipse for android,只好自己配置了.首先安装一个eclipse,在Help——Install New SoftWare中安装ADT,地址为http://dl-ssl.google.com/android/eclipse 可能需要漫长的等待. 3.创建AVD.根据http://www.cocos2d-x.org/boards/6/topics/12563 所说,需要安装4.0.3以上的虚拟机. 4.在eclipse中导入