枚舉Android系統的進程、任務和服務的信息 – Android移動開發技術文章_手機開發 Android移動開發教學課程

 

一、簡介


  在Android Market上,不乏各種各樣的手機管理軟件,360手機安全軟件,QQ手機安全助手,開機自啟動管理軟件,等等之類的~這些軟件給我的一個感覺是,做手機管理軟件的都很NX,於是自己也想實現一個很小的功能,比如:枚舉Android系統中進程Process、任務Task和服務Service的信息。


  首先在網上收集資料,想瞭解一下大N們是如何編寫這類軟件的,但是找瞭半天,結果是無功而返。其實,這個時候,往往忽略瞭手邊最重要的一個開發資料,就是Android的開發文檔。我也是新手當上路,不太瞭解整個Android SDK提供的包的結構,也隻能先直接搜索關鍵字瞭。結果找到幾個很重要的類:


package android.app;class    ActivityManager.MemoryInfo    Information you can retrieve about the available memory through getMemoryInfo(ActivityManager.MemoryInfo). class    ActivityManager.ProcessErrorStateInfo    Information you can retrieve about any processes that are in an error condition. class    ActivityManager.RecentTaskInfo    Information you can retrieve about tasks that the user has most recently started or visited. class    ActivityManager.RunningAppProcessInfo    Information you can retrieve about a running process. class    ActivityManager.RunningServiceInfo    Information you can retrieve about a particular Service that is currently running in the system. class    ActivityManager.RunningTaskInfo    Information you can retrieve about a particular task that is currently “running” in the system.
 


 



 關於上面幾個類的介紹,相信大傢看英文可以知道這些類的大概意思,稍後在程序源代碼中在為大傢詳細介紹。同時,類ActivityManager還實現幾個對我們這個程序有用的方法:

1、List<ActivityManager.RunningAppProcessInfo> getRunningAppProcesses()


  返回當前運行在Android設備上的所有應用程序的進程。


2、List<ActivityManager.RunningServiceInfo> getRunningServices(int maxNum) 


   返回當前正在運行的服務列表


3、List<ActivityManager.RunningTaskInfo> getRunningTasks(int maxNum)


  返回當前正在運行的任務列表(任務,是一個或多個活動的集合;這些活動以棧的形式運行在一個任務當中),按照最近一次運行的任務排在任務列表前端的方式,輸出所有的任務。 




二、執行結果展示 


  我們的程序執行後的效果如下,使用三個Tab頁來分別顯示進程信息、任務信息、和服務信息,每個Tab頁中都是一個ListActivity,以列表的方式展示:



上圖為系統進程信息



上圖為系統任務信息



上圖為系統服務的相關信息


  以上三個圖片,佈局很難看,請大傢見諒,我不是搞美工的,所以湊合看就行瞭。我們的程序打印出瞭系統進程、任務和服務的一部分信息,還有一些信息由於空間的有限,暫時沒有輸出,有興趣的同學可以自己完成這些功能。




三、程序實現


  大傢對這些函數有瞭一些瞭解之後,我們開始編寫我們的代碼,這裡,我們將省略掉佈局文件的代碼,減少文章的空間,主要介紹如何枚舉系統的相關信息的代碼,其他的代碼,還請各位讀者自己完善,同時可以鞏固一下Android的基礎知識。


a、獲取系統進程的信息


  首先我們要獲取ActivityManager的對象實例,通過調用getSystemService(ACTIVITY_SERVICE),將返回一個ActivityManager的實例;在獲取該實例後,調用其getRunningAppProcesses()方法,可以返回一個List,在前面的方法介紹中,講到瞭該List中存放的數據類型為ActivityManager.RunningAppProcessInfo。那麼,對該List進行遍歷,從List中的每項RunningAppProcessInfo中可以獲取盡享相關的信息。實例代碼如下,我們使用瞭一個ListAdapter來綁定到一個ListView當中進行顯示:



ProcMgrActivity.java
/**
* ActivityManager.RunningAppProcessInfo {
* public int importance // 進程在系統中的重要級別
* public int importanceReasonCode // 進程的重要原因代碼
* public ComponentName importanceReasonComponent // 進程中組件的描述信息
* public int importanceReasonPid // 當前進程的子進程Id
* public int lru // 在同一個重要級別內的附加排序值
* public int pid // 當前進程Id
* public String[] pkgList // 被載入當前進程的所有包名
* public String processName // 當前進程的名稱
* public int uid // 當前進程的用戶Id
* }
*/
package crazypebble.sysassist.procmgr;
import crazypebble.sysassist.R;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

import android.app.ActivityManager;
import android.app.ActivityManager.RunningAppProcessInfo;
</SP

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。