【问题标题】:Getting a list of running processes and killing a specific process获取正在运行的进程列表并杀死特定进程
【发布时间】:2023-03-25 15:22:01
【问题描述】:

我正在执行以下代码:

ActivityManager actvityManager = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
List<RunningTaskInfo> procInfos = actvityManager.getRunningTasks(1000);

然后,我杀死一个我感兴趣的进程

actvityManager.killBackgroundProcesses(process.baseActivity.getPackageName());

其中process 是来自procInfos 的条目。

问题是,如果我再次运行 getRunningTasks - 它仍然会显示我(可能)杀死的进程,而 Android 的任务管理器在调用 killBackgroundProcesses 之前列出了该进程,并在调用之后将其从列表中删除。

那么,关于任务管理器如何获取其正在运行的进程列表的任何想法? 我在无根设备上成功杀死了 3rd-party 进程是否正常?

【问题讨论】:

  • 这作为一个新问题会更好,因为它与您最初提出的问题完全不同。无论如何,您可以在这里找到您当前问题的大部分答案:stackoverflow.com/questions/8814696/…,尤其是第二个答案。
  • @RobPridham:非常感谢,我没有看到这个问题。而且我改写的问题在我看来与原来的问题并没有太大的不同......

标签: android process kill-process


【解决方案1】:

“正在运行”并不意味着用户启动了它;它可能正在侦听事件、执行计划的后台同步或其他任何事情。

ActivityManager.getRunningTasks() 可能更接近你想要的,但本质上你总是会遇到这个问题,因为用户无法完全控制当前活动的内容。

【讨论】:

  • 有道理,但我仍然不知道为什么 Gallery 显示为“正在运行”,因为我重新启动了设备并且肯定根本没有启动 Gallery。
  • 可能有多种原因 - 仅举一个例子,应用程序可以订阅系统启动事件,并且接收到它会导致它被启动,因此它将被视为正在运行,直到系统决定杀死它。
  • 非常感谢。 getRunningTasks() 似乎真的可以满足我的需要。最后一个问题:您是否知道如何获取getRunningTasks 返回的任务(ActivityManager.RunningTaskInfo)的相应进程名称?
  • 是的 - 该对象的 baseActivity 属性将引导您找到一个包名称,您可以将其与原始帖子中进程的 pkgList 属性中的值进行匹配。
  • 请注意,从 Android 5.0 Lollipop(API 级别 21)开始,ActivityManager.getRunningTasks() 已被弃用。 developer.android.com/reference/android/app/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-08
  • 2018-02-14
  • 2018-10-14
相关资源
最近更新 更多