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

Espresso(Android UI测试)运行时如何终止应用程序?技术求助

在Espresso测试中彻底终止应用的可行方案

我明白你要的是彻底终止应用、不让它留在后台的效果,用返回键确实达不到这个要求,这里给你几个经过验证的实用解决方案:

方法一:通过UiDevice执行Shell命令(最推荐)

如果你已经在使用UiDevice,直接执行adb shell的强制停止命令是最省心的——效果和你手动在终端敲am force-stop <包名>完全一样,不需要额外配置权限,还能确保应用被彻底终止:

import androidx.test.uiautomator.UiDevice
import androidx.test.platform.app.InstrumentationRegistry

fun stopAppCompletely() {
    val device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
    val packageName = InstrumentationRegistry.getInstrumentation().targetContext.packageName
    device.executeShellCommand("am force-stop $packageName")
}

方法二:借助ActivityManager强制停止应用

通过Android系统的ActivityManager直接强制停止应用进程,能彻底清理所有相关组件,但需要在测试目录的AndroidManifest.xml中添加权限:

import android.app.ActivityManager
import android.content.Context
import androidx.test.core.app.ApplicationProvider

fun forceStopApp() {
    val packageName = ApplicationProvider.getApplicationContext<Context>().packageName
    val activityManager = ApplicationProvider.getApplicationContext<Context>()
        .getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
    activityManager.forceStopPackage(packageName)
}

测试目录下的权限配置:

<uses-permission android:name="android.permission.FORCE_STOP_PACKAGES" />

方法三:关闭所有Activity后杀死进程

如果不想添加额外权限,可以先清空Activity任务栈,再直接杀死当前进程,也能达到彻底终止的效果:

import androidx.test.platform.app.InstrumentationRegistry
import android.os.Process

fun terminateApp() {
    val instrumentation = InstrumentationRegistry.getInstrumentation()
    // 启动Launcher意图并清空任务栈
    instrumentation.runOnMainSync {
        instrumentation.targetContext.startActivity(
            instrumentation.targetContext.packageManager.getLaunchIntentForPackage(
                instrumentation.targetContext.packageName
            )?.apply {
                addFlags(android.content.Intent.FLAG_ACTIVITY_CLEAR_TASK or android.content.Intent.FLAG_ACTIVITY_NEW_TASK)
            }
        )
    }
    // 杀死当前进程
    Process.killProcess(Process.myPid())
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:46:33