擷取android系統中程序,任務,服務資訊,需要通過ActivityManager類來實作。
ActivityManager的功能是為系統中所有運作着的Activity互動提供了接口。
ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
通過 List<RunningTaskInfo> runningTasks = am.getRunningTasks(maxNum);傳回任務清單資訊
通過List<RunningServiceInfo> serivces = am.getRunningServices(maxNum);傳回服務清單資訊
通過List<RunningAppProcessInfo> apps = am.getRunningAppProcesses(); 傳回程序清單資訊
下面是RunningTaskInfo,RunningServiceInfo,RunningAppProcessInfo,三個類的解釋:
Android.app.ActivityManager.RunningTaskInfo
屬性名稱 | 資料類型 | 描述 |
baseActivity | ComponentName | 任務做為第一個運作中的Activity元件資訊 |
description | CharSequence | 任務目前狀态的描述 |
id | Int | 任務的ID |
numActivities | Int | 任務中所運作的Activity數量,包含已停止的 |
numRunning | Int | 任務中所運作的Activity數量,不包含已停止或不延續運作的 |
thumbnall | Bitmap | 任務目前狀态的位圖表示,目前為null |
topActivity | ComponentName | 處于任務棧的棧頂的活動元件 |
Android.app.ActivityManager.RunningServiceInfo
屬性名稱 | 資料類型 | 描述 |
activeSince | long | 服務第一次被激活的時間 (啟動和綁定方式) |
clientCount | Int | 接到該服務的用戶端數目 |
crashCount | Int | 服務運作期間,出現當機的次數 |
foreground | Boolean | 若為true,則該服務在背景執行 |
lastActivityTime | Long | 最後一個Activity與服務綁定的時間 |
pid | int | 若此值不為0,則表示正在運作服務的Id |
Process | String | 該服務的名稱 |
restarting | long | 若此值不為0,則表示該服務不在運作中,将在參數給定的時間點重新開機服務 |
service | ComponentName | 服務的元件名稱 |
started | boolean | 若此值為true,則表示服務已經在啟動運作中 |
Android.app.ActivityManager.RunningAppProcessInfo
屬性名稱 | 資料類型 | 描述 |
importance | int | 程序在系統中的重要級别 |
importanceReasonCode | int | 程序的重要原因代碼 |
importanceReasonComponent | ComponentName | 程序中元件的描述資訊 |
importanceReasonPid | int | 目前程序的子程序Id |
lru | int | 在同一個重要級别内的附加排序值 |
pid | int | 目前程序Id |
pkgList | String[] | 被載入目前程序的所有包名 |
processName | String | 目前程序的名稱 |
uid | int | 目前程序的使用者Id |
代碼:
擷取任務資訊
@Override
public void onClick(View v) {
String info = "";
List<RunningTaskInfo> runningTasks = am.getRunningTasks(maxNum);
for (RunningTaskInfo task:runningTasks){
info += "一個任務資訊開始:\n";
info += "啟動目前任務的activity名稱:" + task.baseActivity.getClassName()+ "\n";
info += "目前任務狀态的描述:" + task.description.toString()+ "\n";
info += "目前任務Id:" + task.id+ "\n";
info += "任務中所運作的Activity數量,包含已停止的:" + task.numActivities+ "\n";
info += "任務中所運作的Activity數量,不包含已停止或不延續運作的:" + task.numRunning+ "\n";
System.out.print(info);
}
}
服務擷取資訊
@Override
public void onClick(View v) {
String info = "";
List<RunningServiceInfo> serivces = am.getRunningServices(maxNum);
for (RunningServiceInfo service:serivces){
info = "一個service資訊開始:\n";
info += "服務第一次被激活的時間:" + service.activeSince + "\n";
info += "接到該服務的用戶端數目:" + service.clientCount+ "\n";
info += "服務運作期間,出現當機的次數:" + service.crashCount+ "\n";
info += "若為true,則該服務在背景執行:" + service.foreground+ "\n";
info += "最後一個Activity與服務綁定的時間:" + service.lastActivityTime+ "\n";
info += "正在運作服務的Id:" + service.pid+ "\n";
info += "該服務的名稱:" + service.process+ "\n";
info += "服務的元件名稱:" + service.service+ "\n";
info += "若此值為true,則表示服務已經在啟動運作中:" + service.started+ "\n";
info += "若此值不為0,則表示該服務不在運作中,将在參數給定的時間點重新開機服務:" + service.restarting+ "\n";
System.out.print(info);
}
}
程序擷取資訊
@Override
public void onClick(View v) {
String info = "";
List<RunningAppProcessInfo> apps = am.getRunningAppProcesses();
for(RunningAppProcessInfo app:apps){
info = "程序資訊開始:\n";
info += "目前程序的使用者Id:" + app.uid + "\n";
info += "目前程序的名稱:" + app.processName + "\n";
info += "目前程序Id:" + app.pid + "\n";
info += "程序在系統中的重要級别:" + app.importance + "\n";
info += "程序的重要原因代碼:" + app.importanceReasonCode + "\n";
info += "程序中元件的描述資訊:" + app.importanceReasonComponent + "\n";
info += "目前程序的子程序Id:" + app.importanceReasonPid + "\n";
info += "在同一個重要級别内的附加排序值:" + app.lru + "\n";
System.out.print(info);
}
}