Android - Как получить processName или packageName с помощью PID? - PullRequest
16 голосов
/ 17 декабря 2011

МОЙ ВОПРОС: Что я мог бы использовать для получения processName или packageName определенного процесса с учетом его PID?

Так как в моем диспетчере задач я хотел использовать PID при использовании кода killBackgroundProcesses для уничтожения процессов. Проблема в том, что мне нужно для этого имя_пакета / имя_процесса, и для пользователя было бы очень хлопотно, если бы я попросил его ввести имя_процесса, а не просто ввести его PID.

вот изображение моего диспетчера задач:

http://i.imgur.com/1zpXg.jpg

Ответы [ 3 ]

19 голосов
/ 19 июня 2012

Этот код является упрощенной версией кода Якуба.Я использую это как статический метод в 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 "";
}
12 голосов
/ 17 декабря 2011

Здравствуйте, вы можете использовать этот код, он работает для меня в 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 голосов
/ 17 декабря 2011

Убивать другие процессы, как правило, плохая идея ..

Посмотрите на этот вопрос Убийца процессов Android и Задача Android уничтожить ..

Итакже этот блог Android: Уничтожение работающего процесса с помощью processid (pid) и имени пакета

И на ваш вопрос Как получить имя процесса из pid тогда

Что-то вроде:

Установите эмулятор терминала , запустите его и запустите:

ps | grep 10058

ps перечисляет процессы и фильтры grep для требуемого идентификатора.

Но это работает только в том случае, если приложение выполняется при запуске команды.

...