Xamarin Android:获取内存中的所有进程

时间:2019-06-16 18:15:02

标签: c# process xamarin.android

有一种方法可以读取所有进程,而不仅仅是正在运行的进程。

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

1 个答案:

答案 0 :(得分:1)

您可以使用以下代码段获取当前正在运行的所有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的列表,并在过程信息类中询问其他信息位(如果需要),这些信息可以是found listed here.

这里有几个例子:

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

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

  • Uid -此过程的用户ID。

编辑:

根据下面的操作注释,他们需要“冻结”(暂停)的流程,以下是一些其他信息:

过去,您可以获取正在运行的任务列表,该列表与进程并不完全相同,但是由android定义为:

  

返回当前正在运行的任务的列表,最多   最近排在第一位,之后排在老位。注意“正在运行”   并不意味着当前已加载任何任务的代码或活动   -任务可能已被系统冻结,以便下次将其带到前台时可以以先前的状态重新启动。

List<ActivityManager.RunningTaskInfo>

但是,根据android文档,此功能在API级别21中已弃用。

  

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

由于Android上面提到的原因,我认为您无法做自己想做的事情,有关更多信息,您可以前往this link.