天天看點

android之系統正在運作的activity和services

你是不是很想知道目前狀态下,系統在背景正運作着的activity呢?這裡,讓我們一起來實作吧。

/**

* 擷取系統中正在運作的任務資訊(強調下,任務是多個activity的集合)

*/

public void run(){

String info = "" ;

// 擷取的正在運作的activity的最大數量(防止太多,系統承受不了啊)、

int maxNum = 40;

// ActivityManager的功能是為系統中所有運作着的Activity互動提供了接口,主要的接口圍繞着運作中的程序資訊,任務資訊,服務資訊等

ActivityManager activityManager = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);

/**

* 擷取正在運作的任務這裡一定要注意,這裡我們擷取的時候,

* 你的任務或者其中的activity可能沒結束,但是當你在後邊使用的時候,很有可能已經被kill了哦。

* 意思很簡單,系統返給你的正在運作的task,是暫态的,僅僅代表你調用該方法時系統中的狀态,

* 至于後邊是否發生了該變,系統概不負責、

*/

List<ActivityManager.RunningTaskInfo> runningTasks = activityManager.getRunningTasks(maxNum);

for(ActivityManager.RunningTaskInfo taskInfo:runningTasks){

info+="一個任務資訊開始:/n";

info+="目前任務中正處于運作狀态的activity數目:"+taskInfo.numRunning;

info+="目前任務中的activity數目: "+taskInfo.numActivities;

info+="啟動目前任務的activity名稱:"+taskInfo.baseActivity.getClassName();

}

注意:這裡要給android.permission.GET_TASKS權限哦。

上面的代碼,我們隻能擷取到運作中的task(任務),那麼如何獲得背景運作的service資訊呢?

請看代碼:

/***

* 擷取運作在背景中的service

*/

private void run2(){

String info = "";

int maxNum = 30;

ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);

// 注意這裡擷取的方法和傳回值的類型都變化了啊

List<ActivityManager.RunningServiceInfo> serivces = activityManager.getRunningServices(maxNum);

for(RunningServiceInfo service:serivces){

info = "一個service資訊開始:/n";

info+="目前service的啟動時間:"+service.activeSince;

info+="連結到目前service用戶端的數量:"+service.clientCount;

}

}

---------------------------------------------------------------------------------------

下面,我們展示下,對于RunningTaskInfo和RunningServiceInfo兩個類,我們可以擷取的資訊

android之系統正在運作的activity和services
android之系統正在運作的activity和services