【问题标题】:Android get PID of other applicationsAndroid获取其他应用程序的PID
【发布时间】:2011-05-18 02:56:39
【问题描述】:

我希望能够启动一项活动或服务并尽快获得该进程的 PID,这是最好的情况。除了浏览 /proc 目录外,我还有其他选择吗目录并开始观察?

【问题讨论】:

  • 只是好奇,但到底是为了什么?
  • 应用组件可以运行在不同的进程上,不同应用的组件可以共享同一个进程,所以没有一对一的关系,所以没有意义。
  • @john 为安全目的开发应用程序分析器。重要的是我能够在应用启动之前安装好我的监控工具并收集数据。

标签: java android


【解决方案1】:

我认为您需要使用 ActivityManager:有关流程信息,请参阅 http://developer.android.com/reference/android/app/ActivityManager.RunningAppProcessInfo.html。你可以:

  1. 获取所有正在运行的应用进程。
  2. 找到您的应用。
  3. 获取其 PID。

【讨论】:

  • 谢谢。我担心这也会导致在我启动应用程序以分析和获取 PID 之间出现竞争情况,但它似乎比浏览 /proc 目录更干净,所以你会得到 +1
  • 啊:如果您正在为此寻找另一个进程,那么是的,您可能会在一段时间内(未定义)看到它。但不确定是否有更好的选择:如果你找到了,请告诉我。
  • 有什么方法可以在 Android API 21 及更高版本上实现这一点吗?我不认为 RunningAppProcessInfo 在 Android L 及更高版本中暴露。
  • google进程和普通app进程有区别吗?如果我像这样检查我正在运行的进程,我会检索我自己的应用程序的当前进程。但手机同时运行谷歌地图,但我无法确定谷歌地图进程。 (或者有没有其他方法可以检索谷歌地图 pid?)
【解决方案2】:
ActivityManager activityManager = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> pidsTask = activityManager.getRunningAppProcesses();

for(int i = 0; i < pidsTask.size(); i++) {
    nameList.add(pidsTask.get(i).processName);
    idList.add(pidsTask.get(i).uid);
}

pidsTask.get(i).uid // 返回应用程序的 PID(进程)

【讨论】:

  • uid 不是应用程序的实际 pid 例如,它的 pid 可能是 302 而它的 uid 可能是 10039
【解决方案3】:

试试这个

int id= android.os.Process.myPid();

【讨论】:

【解决方案4】:
for (RunningAppProcessInfo runningProInfo : runningProcInfo) {

    int pid = runningProInfo.pid;

    Log.e(TAG+"-pid", ""+pid);

}

其中 TAG = "Name_Of_Your_Activity"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-01
    • 2022-01-09
    • 2014-02-03
    • 2015-10-25
    相关资源
    最近更新 更多