Android Instrumentation

一、Instrumentation介绍

Instrumentation(仪表)是Android平台上的一个重要概念,它允许开发者在应用程序中进行自动化测试和性能分析。通过Instrumentation,开发者可以将测试包和目标测试应用加载到同一个进程中运行,从而可以直接调用应用程序中的控件方法,并修改和验证控件的数据。

Instrumentation的主要作用是为应用程序提供一种机制,使得开发者可以在运行时对应用程序进行监控和控制。它可以帮助开发者编写自动化测试用例,对应用程序的各个组件进行测试,并收集测试结果。此外,Instrumentation还可以用于性能分析,帮助开发者找出应用程序的性能瓶颈,并进行优化。

在Android开发中,Instrumentation通常通过继承android.app.Instrumentation类来实现。开发者可以重写Instrumentation类中的方法,以实现自定义的测试逻辑。通过Instrumentation,开发者可以获取应用程序的上下文、启动Activity、发送按键事件、模拟触摸事件等操作,从而实现对应用程序的控制和测试。

二、Instrumentation相关类

Instrumentation

用于实现应用程序检测代码的基类。

Instrumentation文件路径:

frameworks/base/core/java/android/app/Instrumentation.java

Instrumentation定义:

public class Instrumentation {
    public static class ActivityMonitor {}
    public static final class ActivityResult {}
    private final class InstrumentationThread extends Thread {}
    private static final class EmptyRunnable implements Runnable {}
    private static final class SyncRunnable implements Runnable {}
    private static final class ActivityWaiter {}
    private final class ActivityGoing implements MessageQueue.IdleHandler {}
    private static final class Idler implements MessageQueue.IdleHandler {}
}

Instrumentation方法:

public ActivityResult execStartActivity(Context who, IBinder contextThread, IBinder token, Activity target, Intent intent, int requestCode, Bundle options):执行应用程序发出的 startActivity 调用。
public void execStartActivities(Context who, IBinder contextThread, IBinder token, Activity target, Intent[] intents, Bundle options):执行应用程序发出的 startActivity 调用。
public int execStartActivitiesAsUser(Context who, IBinder contextThread, IBinder token, Activity target, Intent[] intents, Bundle options, int userId) :执行应用程序发出的 startActivity 调用。
public ActivityResult execStartActivity(Context who, IBinder contextThread, IBinder token, String target, Intent intent, int requestCode, Bundle options) :执行应用程序发出的 startActivity 调用。
public ActivityResult execStartActivity(Context who, IBinder contextThread, IBinder token, String resultWho, Intent intent, int requestCode, Bundle options, UserHandle user) :执行应用程序发出的 startActivity 调用。
public ActivityResult execStartActivityAsCaller(Context who, IBinder contextThread, IBinder token, Activity target, Intent intent, int requestCode, Bundle options, boolean ignoreTargetSecurity, int userId):执行应用程序发出的 startActivity 调用。
public void execStartActivityFromAppTask(Context who, IBinder contextThread, IAppTask appTask, Intent intent, Bundle options) :执行应用程序发出的 startActivity 调用。
public static void checkStartActivityResult(int res, Object intent):确认StartActivity结果。
Instrumentation.ActivityMonitor addMonitor(String cls, Instrumentation.ActivityResult result, boolean block):addMonitor(ActivityMonitor)的便捷包装,为您创建一个匹配 Instrumentation.ActivityMonitor的类并将其返回。
Instrumentation.ActivityMonitor addMonitor(IntentFilter filter, Instrumentation.ActivityResult result, boolean block):addMonitor(ActivityMonitor)的便捷包装,为您创建一个匹配 Instrumentation.ActivityMonitor的意向过滤器并将其返回。
void addMonitor(Instrumentation.ActivityMonitor monitor):添加一个新的 Instrumentation.ActivityMonitor ,每当一个活动开始时将被检查。
void callActivityOnCreate(Activity activity, Bundle icicle):执行一个活动的方法 onCreate(Bundle)调用。
void callActivityOnCreate(Activity activity, Bundle icicle, PersistableBundle persistentState):执行一个活动的 onCreate(Bundle)方法的调用。
void callActivityOnDestroy(Activity activity):执行一个活动的 onDestroy()方法的调用。
void callActivityOnNewIntent(Activity activity, Intent intent):执行一个活动的 onNewIntent(Intent)方法的调用。
void callActivityOnPause(Activity activity):执行一个活动的方法 onPause()调用。
void callActivityOnPostCreate(Activity activity, Bundle icicle, PersistableBundle persistentState):执行调用一个活动的的 onPostCreate(Bundle)方法。
void callActivityOnPostCreate(Activity activity, Bundle icicle):执行调用一个活动的的 onPostCreate(Bundle)方法。
void callActivityOnRestart(Activity activity):执行调用一个活动的的 onRestart()方法。
void callActivityOnRestoreInstanceState(Activity activity, Bundle savedInstanceState):执行一个活动的方法的调用 onRestoreInstanceState(Bundle) 。
void callActivityOnRestoreInstanceState(Activity activity, Bundle savedInstanceState, PersistableBundle persistentState):执行调用一个活动的的 onRestoreInstanceState(Bundle)方法。
void callActivityOnResume(Activity activity):执行调用一个活动的的 onResume()方法。
void callActivityOnSaveInstanceState(Activity activity, Bundle outState, PersistableBundle outPersistentState):执行调用一个活动的的 onSaveInstanceState(Bundle)方法。
void callActivityOnSaveInstanceState(Activity activity, Bundle outState):执行调用一个活动的的 onSaveInstanceState(Bundle)方法。
void callActivityOnStart(Activity activity):执行调用一个活动的的 onStart()方法。
void callActivityOnStop(Activity activity):执行调用一个活动的的 onStop()方法。
void callActivityOnUserLeaving(Activity activity):执行调用一个活动的的 onUserLeaveHint()方法。
void callApplicationOnCreate(Application app):执行应用程序的 onCreate()方法的调用。
boolean checkMonitorHit(Instrumentation.ActivityMonitor monitor, int minHits):测试现有的 Instrumentation.ActivityMonitor是否已被击中。
void finish(int resultCode, Bundle results):终止应用程序的检测。
Bundle getAllocCounts():使用分配计数的当前结果返回一个包。
Bundle getBinderCounts():返回包含此过程的各种绑定程序计数的绑定。
ComponentName getComponentName():返回此工具的完整组件名称。
Context getContext():返回这个工具包的上下文。
Context getTargetContext():为正在检测的目标应用程序返回一个上下文。
UiAutomation getUiAutomation(int flags):获取设置了标志的 UiAutomation实例。
UiAutomation getUiAutomation():获取没有设置标志的 UiAutomation实例。
boolean invokeContextMenuAction(Activity targetActivity, int id, int flag):显示当前焦点视图的上下文菜单并执行特定的上下文菜单项。
boolean invokeMenuActionSync(Activity targetActivity, int id, int flag):执行特定的菜单项。
boolean isProfiling():检查此检测是否启用了分析启用。
Activity newActivity(Class<?> clazz, Context context, IBinder token, Application application, Intent intent, ActivityInfo info, CharSequence title, Activity parent, String id, Object lastNonConfigurationInstance):执行 Activity对象的实例化。
Activity newActivity(ClassLoader cl, String className, Intent intent):执行进程的 Activity对象的实例化。
Application newApplication(ClassLoader cl, String className, Context context):执行进程的 Application对象的实例化。
static Application newApplication(Class<?> clazz, Context context):执行进程的 Application对象的实例化。
void onCreate(Bundle arguments):在仪器启动时调用,在加载任何应用程序代码之前。
void onDestroy():在所有正常的应用程序清理发生后,仪表应用程序停止时调用。
boolean onException(Object obj, Throwable e):只要系统捕获应用程序抛出的未处理的异常,就会调用它。
void onStart():检测线程进入执行的方法。
void removeMonitor(Instrumentation.ActivityMonitor monitor):删除 Instrumentation.ActivityMonitor以前添加了 addMonitor(Instrumentation.ActivityMonitor) 。
void runOnMainSync(Runnable runner):在应用程序的主线程上执行调用,直到完成为止。
void sendCharacterSync(int keyCode):用于发送特定字符键码的向下和向上键事件的更高级别的方法。
void sendKeyDownUpSync(int key):将向上和向下键事件同步发送到当前聚焦的窗口。
void sendKeySync(KeyEvent event):将关键事件发送到当前聚焦的窗口/视图并等待它被处理。
void sendPointerSync(MotionEvent event):分派指针事件。
void sendStatus(int resultCode, Bundle results):提供关于应用程序的状态报告。
void sendStringSync(String text):将与文本相对应的关键事件发送到正在进行检测的应用程序。
void sendTrackballEventSync(MotionEvent event):发送跟踪球事件。
void setInTouchMode(boolean inTouch):强制全局系统进入或退出触摸模式。
void start():创建并启动运行检测的新线程。
Activity startActivitySync(Intent intent):开始一项新活动并等待它在返回之前开始运行。
void startProfiling():如果isProfiling()返回true,则此方法将开始分析。
void stopProfiling():如果isProfiling()返回true,则停止分析。
void waitForIdle(Runnable recipient):为应用程序的主线程闲置时安排回调(不再有要处理的事件)。
void waitForIdleSync():同步等待应用程序闲置。
Activity waitForMonitor(Instrumentation.ActivityMonitor monitor):等待现有的 Instrumentation.ActivityMonitor被击中。
Activity waitForMonitorWithTimeout(Instrumentation.ActivityMonitor monitor, long timeOut):等待现有的 Instrumentation.ActivityMonitor被击中,直到超时到期。
ActivityMonitor:
Instrumentation.ActivityMonitor(IntentFilter which, Instrumentation.ActivityResult result, boolean block):创建一个新的ActivityMonitor,查找要启动的特定类型的意图。
Instrumentation.ActivityMonitor(String cls, Instrumentation.ActivityResult result, boolean block) :创建一个新的ActivityMonitor,查找要启动的特定活动类。
final IntentFilter getFilter():检索与此ActivityMonitor关联的过滤器。
final int getHits():检索显示器到目前为止的次数。
final Activity getLastActivity():检索此监视器看到的最新活动类。
final Instrumentation.ActivityResult getResult():检索与此ActivityMonitor相关联的结果,如果没有,则返回null。
final boolean isBlocking():检查此监视器是否阻止活动开始(不允许实际活动运行)或允许它们正常执行。
final Activity waitForActivity():阻塞直到创建一个与此监视器匹配的活动,并返回结果活动。
final Activity waitForActivityWithTimeout(long timeOut):阻塞,直到创建一个与此监视器匹配的活动,并返回结果活动或直至超时。
ActivityResult:
Instrumentation.ActivityResult(int resultCode, Intent resultData):创建一个新的活动结果。
int getResultCode():检索包含在此结果中的结果代码。
Intent getResultData():检索包含在此结果中的数据。
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值