思路如下:
第一步拿到这个进程的 ProcessRecord ,
然后通过 ProcessRecord 的 WindowProcessController 的 mActivities 变量就可以知道Activity 的具体信息 。
com.android.server.wm.WindowProcessController#dumpActivities
public void dumpActivities(PrintWriter pw, String prefix) {
if (mActivities.size() > 0) {
pw.print(prefix);
pw.println("Activities:");
for (int i = 0; i < mActivities.size(); i++) {
pw.print(prefix);
pw.print(" - ");
pw.println(mActivities.get(i));
}
}
}
然后在 com.android.server.utils.PriorityDump.PriorityDumper#dump 调用:
if(args.length>=1 && args[0].equals("w0")){
ProcessRecord proc = null ;
for (int i = 0; i<mProcessList.mLruProcesses.size(); i++) {
if(mProcessList.mLruProcesses.get(i).processName.equals("com.example.test2"))
{
proc = mProcessList.mLruProcesses.get(i);
break;
}
}
if(proc != null){
pw.println(" hasForegroundActivities: "+ proc.getWindowProcessController().hasForegroundActivities());
proc.getWindowProcessController().dumpActivities(pw," ");
} else{
pw.println(" not found");
}
return ;
}
注意: 我这里指定了包名:com.example.test2
adb 命令如下:
adb shell dumpsys activity w0
输出:
hasForegroundActivities: true
Activities:
- ActivityRecord{dccc809 u0 com.example.test2/.SecondActivity t72}
- ActivityRecord{9cd80d2 u0 com.example.test2/.Alert t72}
- ActivityRecord{1131fda u0 com.example.test2/.Activity3 t72}