You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Espresso或UiAutomator模拟应用杀死并重启操作?

用Espresso或UiAutomator实现测试中杀死并重启应用的方法

一、Espresso结合Instrumentation方案

杀死应用

通过系统ActivityManager操作,先获取目标应用包名,再调用进程停止方法:

String packageName = InstrumentationRegistry.getTargetContext().getPackageName();
ActivityManager activityManager = (ActivityManager) InstrumentationRegistry.getTargetContext()
    .getSystemService(Context.ACTIVITY_SERVICE);

// 常规方式:杀死后台进程
activityManager.killBackgroundProcesses(packageName);

// 彻底强制停止(需系统权限,一般测试不推荐)
// activityManager.forceStopPackage(packageName);

注意:forceStopPackage需要在测试清单中添加<uses-permission android:name="android.permission.FORCE_STOP_PACKAGES" />,但该权限仅系统应用或Root设备可用,多数场景用killBackgroundProcesses即可满足需求。

重启应用

通过包管理器获取应用启动Intent,启动主Activity并等待加载完成:

Intent launchIntent = InstrumentationRegistry.getTargetContext()
    .getPackageManager()
    .getLaunchIntentForPackage(packageName);
launchIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
InstrumentationRegistry.getTargetContext().startActivity(launchIntent);

// 等待应用UI加载完成
Espresso.onView(ViewMatchers.isRoot()).perform(ViewActions.waitForIdle());

二、UiAutomator方案

UiAutomator支持系统级操作,适合模拟用户手动杀应用的流程:

步骤1:获取UiDevice实例

UiDevice device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());

步骤2:打开应用信息页面并强制停止

String packageName = InstrumentationRegistry.getTargetContext().getPackageName();
// 启动应用信息页
Intent settingsIntent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri appUri = Uri.fromParts("package", packageName, null);
settingsIntent.setData(appUri);
settingsIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
InstrumentationRegistry.getTargetContext().startActivity(settingsIntent);

// 等待并点击"强制停止"按钮
device.wait(Until.hasObject(By.text("强制停止")), 5000);
UiObject forceStopBtn = device.findObject(By.text("强制停止"));
if (forceStopBtn.exists() && forceStopBtn.isEnabled()) {
    forceStopBtn.click();
    // 确认弹窗
    device.wait(Until.hasObject(By.text("确定")), 3000);
    UiObject confirmBtn = device.findObject(By.text("确定"));
    if (confirmBtn.exists()) confirmBtn.click();
}

步骤3:重启应用

// 返回桌面
device.pressHome();

// 方式1:通过应用图标启动(需替换为你的应用名称/描述)
UiObject appIcon = device.findObject(By.desc("你的应用名称"));
if (appIcon.exists()) appIcon.click();

// 方式2:通过Intent启动(和Espresso方式一致)
// Intent launchIntent = InstrumentationRegistry.getTargetContext().getPackageManager().getLaunchIntentForPackage(packageName);
// launchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// InstrumentationRegistry.getTargetContext().startActivity(launchIntent);

// 等待应用加载完成
device.wait(Until.hasObject(By.pkg(packageName).depth(0)), 10000);

三、关键注意事项

  • 执行杀应用操作前,确保应用处于后台状态,避免干扰当前测试流程
  • 不同Android版本的系统控件文本可能不同,建议通过资源ID定位(如By.res("android:id/button1"))替代文本定位,提升兼容性
  • 重启后必须添加足够的等待逻辑,确保应用完全初始化完成后再执行后续测试步骤

内容的提问来源于stack exchange,提问作者Venkataramanan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 06:05:23