簡體   English   中英

Android-如何從活動ID檢索PID?

[英]Android - how to retrieve a PID from an activity ID?

我正在研究一種將正在運行的任務ID綁定到其相應進程ID(pid)中的方法。
上下文是一項系統服務,部署為平台的一部分,需要監視前台的當前活動,我可以使用整個AOSP平台,但不能更改它。

我的服務中包含以下代碼來獲取活動堆棧:

private List<StackInfo> getStack() throws Exception
  {
      Log.i(TAG, "getStack");
      List<StackInfo> stacks = null;
      stacks = mAm.getAllStackInfos();
      return stacks;
  }

這是監視線程:

private class MonitorThread extends Thread
{
     public void run()
     {
         while (true)
         {
              try
              {
                 Log.i(TAG, "In MonitorThread");
                 Thread.sleep(1000);
                 StackInfo fore = getStack().get(0);
                 String name = fore.taskNames[fore.taskIds.length-1];
                 name = name.substring(0, name.indexOf("/"));
                 /* Next line is where I have the problem, I'm getting the task id (activity id) instead of the PID for the process */
                 Log.i(TAG, "Current FG PID: "+fore.taskIds[fore.taskIds.length-1] + " name: "+ name + "\n");
              }
              catch (Exception e)
              {
                Log.i(TAG, "---=== EXCEPTION!!! ===---");
                Log.i(TAG, e.getMessage());
                Log.i(TAG, "---=== END EXCEPTION!!! ===---");
              }
          }
      }
  }

通過從活動堆棧中獲取最頂層的活動名稱並從結果中修剪活動名稱(例如,活動名稱com.example / MainActivity屬於流程com.example),這些實現了獲取當前位於前台的進程名稱的目標。 。

到目前為止,我有兩種方法可以實現這一目標,但都不是理想的方法:

  • 壞方法:
    我可以遍歷系統中的每個應用程序,並在其活動堆棧中查找當前活動,一旦找到匹配項,就可以使用應用程序PID(效率低,O(M),其中M是任務總數)

  • 最糟糕的方法
    任務名稱返回為com.package.xxx/activity_name,其中“ /”之前的部分是進程名稱(據我所知,無論如何)。 一旦有了,我就可以叫'ps | grep com.package.xxx'並解析PID的輸出(我真的不希望shell調用)

我在網上只能找到相反的方法-屬於應用程序的所有活動。

有人有更好的主意嗎? 謝謝!

您可以通過以下方式獲取活動PID:

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

要查找“其他”活動的PID, 請檢查此鏈接 使用ActivityManager您可以找到所有正在運行的進程,找到所需的活動,然后獲取其PID ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM