Android中所有正在运行的进程的列表

时间:2015-01-11 09:02:23

标签: android process

如何获取Android系统的所有正在运行的流程列表,包括系统启动流程?

我尝试使用以下代码获取列表:

ActivityManager activityManager = (ActivityManager) this.getSystemService( ACTIVITY_SERVICE );
List<RunningAppProcessInfo> procInfos = activityManager.getRunningAppProcesses();

这为我提供了com.android.phonecom.android.chrome等流程列表。

但是当我在ps中运行adb shell命令时,我可以看到其他一堆进程正在运行。我附上了在我的系统中运行的所有进程的屏幕截图。 Running processes in my devices

有人可以看到,有几个Android系统的流程也在运行,如/system/bin/vold/system/bin/installed等。

getRunningAppProcesses() API未报告这些内容。在其文档中,它表示此API:

  

返回设备上运行的应用程序进程列表。

这是否意味着它不会返回&#34;系统流程&#34;?如果是这种情况,开发人员可以选择迭代什么选项&#34; ALL&#34;在Android上运行的进程?

- 我还尝试了什么: 尝试使用ActivityManager中的另外两个API:

  1. getRecentTasks(int maxNum)及其变体。
  2. 但Android文档警告其使用如下:

      

    此方法在API级别21中已弃用。

         

    自LOLLIPOP起,此方法不再适用于第三方应用

    1. getRunningServices(int maxNum)
    2. 但这两个都不能给我/system/bin/debuggerd等名称

      注意:我在非Root设备上运行Android-4.2 Jellybean。

1 个答案:

答案 0 :(得分:6)

通过从ActivityManager调用API,您只能获取向其注册的应用程序 - 即UI活动 - 而不是所有进程。您看到的使用非反向DNS名称,但路径(例如/system/bin/*)是原生守护进程,由init启动,并且不在ActivityManager

解决此问题的一种方法是直接从/proc获取流程列表(就像工具箱&#39; s ps一样)。这需要以编程方式在那里的目录上进行迭代(即/proc/[0-9]*),并修剪内核线程。内核线程是那些PPID为2的线程,所以它们很容易。原生守护进程的PPID为1.应用程序将有PPID Zygote。

参考:NewAndroidBook.com