【问题标题】:How do I kill all active tasks/apps using ADB?如何使用 ADB 杀死所有活动任务/应用程序?
【发布时间】:2015-06-26 18:28:56
【问题描述】:

是否可以使用 ADB 杀死任务管理器中的所有活动任务/应用程序?这相当于打开task manager 并一个一个地杀死每个任务......

我尝试使用以下adb shell 命令,但这并没有终止所有任务。

adb shell am kill-all

我不能使用adb shell am force-stop <PACKAGE> 命令,因为它需要我知道哪个包/应用程序正在运行。我想杀死所有正在运行的用户应用程序任务。类似于使用任务管理器并一个一个地杀死每个任务。

根据命令描述,kill-all 杀死所有后台进程。后台进程是否等同于“服务”,任务是否等同于“活动”?

另外,是否可以在保留用户数据的同时使用 ADB 清除应用程序的缓存?我似乎 adb shell pm clear 清除了所有用户数据。我只想清除缓存。

我问的原因是因为我正在对少数用户应用程序进行一些性能测试。为了使每个测试有效,我想确保所有用户应用程序都没有任何任务、活动、服务和缓存已经在后台。

【问题讨论】:

  • this 帖子可能重复。
  • 我不相信这是重复的。另一个 SO 问题是关于从设备中关闭和清除一个应用程序,这个问题是关于删除所有非必要的正在运行的任务/应用程序。

标签: android shell android-activity adb


【解决方案1】:

你可以使用force-stop,不需要root权限。

adb shell am force-stop <PACKAGE>

并且可以从最上面运行的activity/app中获取包名

adb shell "dumpsys activity | grep top-activity"

之后你需要对结果进行一些操作,以提取包,这里是我的 java 代码:

public void parseResult(String line){
        int i = line.indexOf(" 0 ");
        if(i == -1){
            return;
        }
        line = line.substring(i);
        i = line.indexOf(":");
        if(i == -1){
            return;
        }
        line = line.substring(i + 1);
        i = line.indexOf("/");
        return line.substring(0, i);
}

【讨论】:

  • 更好的方法是line.substring(line.lastIndexOf(":") + 1, line.lastIndexOf("/"));。输出类似于Proc # 0: fore T/A/T trm: 0 3184:com.android.settings/1000 (top-activity)
【解决方案2】:

如果您想从头开始,即关闭应用程序并清除其数据,您可以执行以下操作

adb shell pm clear com.yourapp.package

【讨论】:

  • 我没有看到@Gustavo 提到的帖子,但我猜是一样的。
  • 'adb shell pm clear' 删除所有用户数据。我想保留用户数据,同时只清除用户应用程序的缓存。
  • 清除缓存需要root权限。如果确实有,您可以访问文件系统并清除特定应用程序的缓存文件夹
  • 是的,我有 root 权限。如何使用 ADB 清除缓存?另外,我必须为每个应用程序/包一个一个地做吗?我不能一次只为所有的包裹吗?如果我必须为每个包一个一个地每个它,我如何以编程方式获取每个安装的用户应用程序的名称并清除缓存。
【解决方案3】:

查找正在运行的应用程序,忽略系统应用程序等并杀死,以下命令完成所有操作;

adb shell ps|grep -v root|grep -v system|grep -v NAME|grep -v shell|grep -v smartcard|grep -v androidshmservice|grep -v bluetooth|grep -v radio|grep -v nfc|grep -v "com.android."|grep -v "android.process."|grep -v "com.google.android."|grep -v "com.sec.android."|grep -v "com.google.process."|grep -v "com.samsung.android."|grep -v "com.smlds" |awk '{print $2}'| xargs adb shell kill

如果您发现任何类似的例外,您可以添加更多例外; grep -v "异常"

【讨论】:

    【解决方案4】:

    对于非 root 设备,我扩展了 Faisal Ameer 的脚本

    adb shell ps | grep -v root | grep -v system | grep -v "android.process." | grep -v radio | grep -v "com.google.process." | grep -v "com.lge." | grep -v shell | grep -v NAME | awk '{print $NF}' | tr '\r' ' ' | xargs adb shell am force-stop
    

    adb shell am force-stop 不需要 root 权限。请注意,应用程序仍显示在运行应用程序抽屉的设备中,但我已验证包进程已使用清除。

    adb shell dumpsys meminfo relevant.package.names
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-07
      • 2014-05-27
      • 1970-01-01
      • 2013-01-15
      • 1970-01-01
      • 2011-09-12
      • 2012-03-07
      相关资源
      最近更新 更多