2011-05-18 27 views
9

我希望能夠啓動一個活動或服務並儘快獲取該進程的PID,這將是最好的情況。除了瀏覽/ proc目錄之外,我還有其他的選擇嗎,這會導致活動/服務啓動的時間與我在proc中找到我想要的時間之間的時間差異目錄並開始觀察?Android獲得其他應用程序的PID

+1

只是好奇,但究竟是什麼? – John 2011-05-18 03:23:04

+1

應用程序組件可以運行在不同的應用程序上,不同應用程序的組件可以共享相同的進程,所以不存在一對一的關係,所以毫無意義。 – 2011-05-18 04:35:52

+0

@john爲了安全目的而在應用程序分析器上工作。在應用程序啓動之前,能夠獲得我的監視工具並收集數據非常重要。 – MattC 2011-05-18 13:30:05

回答

11

我認爲你需要使用ActivityManager:查看http://developer.android.com/reference/android/app/ActivityManager.RunningAppProcessInfo.html瞭解進程信息。您可以:

  1. 獲取所有正在運行的應用程序進程。
  2. 尋找您的應用程序。
  3. 獲取其PID。
+0

謝謝。我擔心這也會導致之間的競爭條件我啓動應用程序進行配置文件並獲取PID,但它似乎比瀏覽/ proc目錄更清潔,因此您得到+1 – MattC 2011-05-18 14:32:30

+1

Ah:如果您正在尋找另一個進程,那麼是的,有一些可能性您不會看到它(一個未定義)一會兒,不知道有更好的選擇霍夫:讓我知道如果你找到一個。 – Femi 2011-05-18 14:50:39

+0

有沒有什麼方法可以在Android API 21及更高版本上完成此操作?我不認爲RunningAppProcessInfo是在Android L及以上版本中公開的。 – 2015-12-23 13:20:09

-1

嘗試這種

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

我曾想過其他進程的PID,而不是我自己的。 – MattC 2012-12-05 16:57:10

+3

這個答案被複制http://stackoverflow.com/questions/7454909/how-to-get-pid-of-android-application-with-out-using-adb-shell – devin 2013-01-17 20:48:39

-1
for (RunningAppProcessInfo runningProInfo : runningProcInfo) { 

    int pid = runningProInfo.pid; 

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

} 

其中TAG = 「Name_Of_Your_Activity」

6
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(ⅰ).uid //返回PID爲應用程序(過程)

相關問題