gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-28 23:32:34 25 4
gpt4 key购买 nike

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

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

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

这给了我进程列表,例如 com.android.phone , com.android.chrome等。

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

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

但是,getRunningAppProcesses() 并未报告这些情况。 API。在其文档中,它说这个 API:

Returns a list of application processes that are running on the device.

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

-- 我还尝试了什么:尝试使用来自 ActivityManager 的另外 2 个 API :

  1. getRecentTasks(int maxNum)它是变体。

但 Android 文档警告它的使用如下:

This method was deprecated in API level 21.

As of LOLLIPOP, this method is no longer available to third party applications

  1. getRunningServices(int maxNum)

但是这两个都不能给我像 /system/bin/debuggerd 这样的名字等。

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

最佳答案

通过从 ActivityManager 调用 API,您只会获得向其注册的应用程序 - 即 UI Activity - 而不是所有进程。您看到的那些具有非反向 DNS 名称,但路径(例如 /system/bin/*)是 native 守护程序,由 init 启动,并被排除在ActivityManager.

解决此问题的一种方法是直接从 /proc 获取进程列表(就像工具箱的 ps 一样)。这需要以编程方式遍历那里的目录(即 /proc/[0-9]*),并剪除内核线程。内核线程是那些 PPID 为 2 的线程,所以它们很简单。 native 守护程序的 PPID 为 1。应用程序的 PPID 为 Zygote。

引用:NewAndroidBook.com

关于android - Android中所有正在运行的进程列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27885482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com