[英]How to retrieve shared preferences into a non-activity class from an activity class in Android?
[英]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.