Android - Как получить имя процесса или имя пакета с помощью PID?
МОЙ ВОПРОС: Что я мог бы использовать для получения processName
или packageName
определенного процесса с учетом его PID
?
Так как в моем диспетчере задач я хотел использовать PID, используя код killBackgroundProcesses, чтобы убить процессы. Проблема в том, что мне нужно имя пакета /processName для этого, и это было бы такой проблемой для пользователя, если бы я попросил их ввести имя процесса, а не просто ввести свой PID.
здесь изображение моего диспетчера задач:
![http://i.imgur.com/1zpXg.jpg]()
Ответы
Ответ 1
Здравствуйте, вы можете использовать этот код, он работает для меня в Android 2.3.3:
private String getAppName(int pID)
{
String processName = "";
ActivityManager am = (ActivityManager)this.getSystemService(ACTIVITY_SERVICE);
List l = am.getRunningAppProcesses();
Iterator i = l.iterator();
PackageManager pm = this.getPackageManager();
while(i.hasNext())
{
ActivityManager.RunningAppProcessInfo info = (ActivityManager.RunningAppProcessInfo)(i.next());
try
{
if(info.pid == pID)
{
CharSequence c = pm.getApplicationLabel(pm.getApplicationInfo(info.processName, PackageManager.GET_META_DATA));
//Log.d("Process", "Id: "+ info.pid +" ProcessName: "+ info.processName +" Label: "+c.toString());
//processName = c.toString();
processName = info.processName;
}
}
catch(Exception e)
{
//Log.d("Process", "Error>> :"+ e.toString());
}
}
return processName;
}
Ответ 2
Этот код является упрощенной версией кода Yaqub. Я использую это как статический метод в классе Util
:
public static String getAppNameByPID(Context context, int pid){
ActivityManager manager
= (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
for(RunningAppProcessInfo processInfo : manager.getRunningAppProcesses()){
if(processInfo.pid == pid){
return processInfo.processName;
}
}
return "";
}
Ответ 3
Убить другие процессы, как правило, плохая идея.
Посмотрите на этот вопрос убийца процесса Android и андроида задача убить..
А также этот блог Android: Убийство запущенного процесса с помощью processid (pid) и имени пакета
И для вашего вопроса Как получить имя процесса из pid, затем
Что-то вроде,
Установите эмулятор терминала, запустите его и запустите:
ps | grep 10058
ps перечисляет процессы и фильтры grep для нужного идентификатора.
Но это работает, только если приложение запускается при запуске команды.