获取正在运行的进程列表并结束特定进程

5

我正在执行以下代码:

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

然后,我使用

kill

命令结束了一个我感兴趣的进程。

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

其中processprocInfos中的一个条目。

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

那么,有什么想法可以解决任务管理器如何获取正在运行的进程列表的问题吗? 在未root的设备上成功终止第三方进程是否正常?


1
这个问题最好作为一个新问题提出,因为它与你最初提出的问题非常不同。无论如何,你可以在这里找到大部分关于你当前问题的答案:https://dev59.com/qmoy5IYBdhLWcg3wCpoz ,特别是第二个答案。 - Rob Pridham
@RobPridham:非常感谢,我没有看到那个问题。而且我重新表述的问题对我来说似乎并没有太大的区别... - Violet Giraffe
1个回答

5
“运行”并不意味着用户已经开始了它;它可能正在监听事件、执行定期后台同步或其他任何操作。
ActivityManager.getRunningTasks() 可能更接近您想要的结果,但本质上您总会遇到这个问题,因为用户不能完全控制当前活动的内容。

听起来有道理,但我仍然不知道为什么“画廊”显示为“正在运行”,因为我重新启动了设备,肯定没有启动“画廊”。 - Violet Giraffe
可能有很多原因 - 举个例子,一个应用程序可以订阅系统启动事件,接收到它将导致它被启动,然后它将被视为正在运行,直到系统决定终止它。 - Rob Pridham
非常感谢。getRunningTasks() 看起来确实可以满足我的需求。最后一个问题:你是否碰巧知道如何获取 getRunningTasks 返回的任务(ActivityManager.RunningTaskInfo)的相应进程名称? - Violet Giraffe
1
是的 - 该对象的baseActivity属性将引导您到一个包名,您可以将其与原始帖子中发现的进程的pkgList属性中的值进行匹配。 - Rob Pridham
请注意,自Android 5.0 Lollipop(API级别21)起,ActivityManager.getRunningTasks()已被弃用。http://developer.android.com/reference/android/app/ActivityManager.html#getRunningTasks(int) - jdev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接