Список всех запущенных процессов в Android
Как получить список системы 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, таких как /system/bin/vold
и /system/bin/installed
и т.д.
Однако они не сообщаются API getRunningAppProcesses()
. В своих документах говорится, что этот API:
Возвращает список процессов приложений, запущенных на устройстве.
Означает ли это, что он не вернет "системный процесс"? И если это так, то какой вариант разработчику может потребоваться для повторения процесса "ВСЕ", запущенного на Android?
- Что еще я пробовал:
Пробовал еще 2 API от ActivityManager
:
-
getRecentTasks(int maxNum)
и его вариант.
Но Android-документы предупреждают о его использовании, как показано ниже:
Этот метод устарел на уровне API 21.
По сравнению с LOLLIPOP этот метод больше не доступен для сторонних приложений
-
getRunningServices(int maxNum)
Но оба они не могли назвать мне имена, такие как /system/bin/debuggerd
и т.д.
ПРИМЕЧАНИЕ. Я запускаю Android-4.2 Jellybean на некорневом устройстве.
Ответы
Ответ 1
Вызывая API из ActivityManager
, вы получаете только зарегистрированные приложения, т.е. действия пользовательского интерфейса, а не все процессы. Те, которые вы видите с не обратным DNS-именем, но путь (например, /system/bin/*
) являются родными демонами, начинаются с init
и выходят из ActivityManager
.
Один из способов - получить список процессов непосредственно из /proc
(как это делает toolbox ps
). Для этого требуется программный перебор по каталогам там (т.е. /proc/[0-9]*
) и обрезка потоков ядра. Нити ядра - это те, у которых PPID
2, поэтому они легки. У родных демонов будет PPID
из 1. Приложения будут иметь PPID
Zygote.
Ссылка: NewAndroidBook.com