android.app.ActivityManager
這個類主要用來管理所有設備上的Activities。
權限:android.permission.GET_TASKS
方法:| 返回類型 方法|
1.List<ActivityManager.RecentTaskInfo> getRecentTasks(int maxNum, int flags)
返回用戶最近使用過的應用程序信息集合。第一個參數是最大數量,第二個參數在API11前只有ActivityManager.RECENT_WITH_EXCLUDED。這個方法以後可能會被廢棄,谷歌推薦用來debug用。
(1) RecentTaskInfo類,主要有些字段
1.1 Intent baseIntent 得到能跳轉到這個Task的Activity,即能通過這個Intent啓動這個Intent指向的程序。
1.2 int id 得到這個Task的標識,如果是-1,則標識這個程序沒啓動,其他數字表示啓動了。
1.3 int persistentId 任務的唯一值。
1.4 Intent baseIntent 啓動任務的Intent
任務欄(長按Home鍵或者Menu鍵或者點擊任務鍵)裏面的任務主要就是靠這個方法獲取的。
- final List<ActivityManager.RecentTaskInfo> recentTasks =
- am.getRecentTasks(MAX_TASKS, ActivityManager.RECENT_IGNORE_UNAVAILABLE);
- if (ad.taskId >= 0) {
- // This is an active task; it should just go to the foreground.
- am.moveTaskToFront(ad.taskId, ActivityManager.MOVE_TASK_WITH_HOME,
- opts);
- } else {
- Intent intent = ad.intent;
- intent.addFlags(Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY
- | Intent.FLAG_ACTIVITY_TASK_ON_HOME
- | Intent.FLAG_ACTIVITY_NEW_TASK);
- if (DEBUG) Log.v(TAG, "Starting activity " + intent);
- context.startActivityAsUser(intent, opts,
- new UserHandle(UserHandle.USER_CURRENT));
- }
- am.removeTask(ad.persistentTaskId, ActivityManager.REMOVE_TASK_KILL_PROCESS);
設置中強行停止應用(hide,需要非public權限)
- ActivityManager am = (ActivityManager)getActivity().getSystemService(
- Context.ACTIVITY_SERVICE);
- am.forceStopPackage(pkgName);
2.List<ActivityManager.RunningAppProcessInfo> getRunningAppProcesses()
返回設備上正在運行的程序的進程集合。
(1)RunningAppProcessInfo類,主要有些字段
1.1 int importance 這個字段的值如果爲IMPORTANCE_FOREGROUND (100)時表示爲前段運行的進程,爲IMPORTANCE_BACKGROUND(400)表示後臺運行。其值還有一些其他的。
1.2 int importanceReasonCode 對進程進行解釋的字段,有3個值 REASON_UNKNOWN(0) 、REASON_PROVIDER_IN_USE(1)、REASON_SERVICE_IN_USE(2)。分別表示沒原因、程序中的content provider被其他程序使用、與前一個理由一樣。
1.3 int importanceReasonPid 當 importanceReasonCode 的值不爲0時這個字段代表1.2中其他程序的PID值,否則值爲0。
1.4 ComponentName importanceReasonComponent 當 importanceReasonCode 中值不爲0時,這個字段代表1.2中其他程序的 ComponentName,否則爲null。
1.5 int pid 進程的PID值。
1.6 int uid user id.
1.7 String processName 進程名,實際等於包名(content provider免疫)。
1.8 String[] pkgList 程序內所有主包,這個測試出來,一般程序都只有一個元素,但系統自帶的程序並且有content provider的有幾個包。
3 List<ActivityManager.RunningTaskInfo> getRunningTasks(int maxNum)
返回正在運行中的程序,參數爲返回的最大個數,返回的順序爲 最近打開的程序,即優先返回最新使用的程序。返回值可能爲空。
(1)RunningTaskInfo類,主要提供字段
1.1 ComponentName baseActivity 代表登陸的Activity的 ComponentName,即可以用這個返回值啓動這個所代表的程序。
1.2 int id A unique identifier for this task.
1.3 int numActivities Number of activities in this task.
1.4 int numRunning Number of activities that are currently running (not stopped and persisted) in this task.
1.5 ComponentName topActivity 存在棧頂的Activity所代表的 ComponentName。用戶可以用這個方法得到現在正在顯示的Activity的 ComponentName。
- ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
- ComponentName cn = am.getRunningTasks(1).get(0).topActivity;
殺死後臺進程,參數爲要被殺的程序的(主)包名。需要權限android.permission.KILL_BACKGROUND_PROCESSES。
5. List<ActivityManager.RunningServiceInfo> getRunningServices(int maxNum)
得到所有正在運行的service。
(1)RunningServiceInfo類,主要提供字段。
1.1 long activeSince 第一次啓動這個service到現在所過的時間段。
1.2 int pid 進程的PID
1.3 int uid user id.
1.4 String process 進程名(包名?)。
1.5 long lastActivityTime 最後一次激活Service到現在的時間
1.6 ComponenName service 得到這個Service的組件名,就是能通過這個啓動service
1.7 long restarting 這個字段的值如果不是0,那麼現在這個service還沒啓動,將在返回值的時間段過後自啓動。
6. void restartPackage (String packageName)
現在這個方法等於方法4了,調用這個方法等於在調用方法4.