首页 > 解决方案 > Xamarin Android:获取位于内存中的所有进程

问题描述

有没有办法读出所有进程,而不仅仅是正在运行的进程。

如果我正确理解Android,一次只有一个进程在运行,其他所有进程都被冻结(后台进程被忽略)

标签: c#processxamarin.android

解决方案


您可以使用以下代码片段获取当前正在运行的所有 android 应用程序进程:

ActivityManager activityManager = (ActivityManager)BaseContext.GetSystemService(Context.ActivityService);
ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();
activityManager.GetMemoryInfo(memoryInfo);

List<ActivityManager.RunningAppProcessInfo> runningAppProcesses = activityManager.RunningAppProcesses as List<ActivityManager.RunningAppProcessInfo>;

然后,您可以遍历调用的列表runningAppProcesses,并在需要时询问进程信息类以获取其他信息,这些信息可以在此处找到。

这里有几个例子:

  • ProcessName - 与此对象关联的进程的名称。

  • Pid - 此进程的 pid;如果没有,则为 0。

  • Uid - 此进程的用户 ID。

编辑:

根据下面的操作评论,他们需要“冻结”(暂停)进程,这里有一些附加信息:

过去,您可以获取正在运行的任务列表,与进程不太一样,但由 android 定义为:

返回当前正在运行的任务的列表,最近的是第一个,之后是较旧的。请注意,“正在运行”并不意味着任务的任何代码当前已加载或处于活动状态——任务可能已被系统冻结,以便在下次进入前台时可以以之前的状态重新启动它。

List<ActivityManager.RunningTaskInfo>

然而,根据 android 文档,此功能在 API 级别 21 中已被贬低。

从 Build.VERSION_CODES.LOLLIPOP 开始,此方法不再可用于第三方应用程序:引入以文档为中心的最新消息意味着它可以将人员信息泄露给调用者。为了向后兼容,它仍然会返回一小部分数据:至少是调用者自己的任务,可能还有其他一些已知不敏感的任务,例如 home。

由于上述Android引用的原因,我认为您无法做您想做的事,有关更多信息,您可以前往此链接。


推荐阅读