ActivityManager之Task、Process

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鍵或者點擊任務鍵)裏面的任務主要就是靠這個方法獲取的。

[java] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. final List<ActivityManager.RecentTaskInfo> recentTasks =  
  2.         am.getRecentTasks(MAX_TASKS, ActivityManager.RECENT_IGNORE_UNAVAILABLE);  
  點擊啓動任務
[java] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. if (ad.taskId >= 0) {  
  2.     // This is an active task; it should just go to the foreground.  
  3.     am.moveTaskToFront(ad.taskId, ActivityManager.MOVE_TASK_WITH_HOME,  
  4.             opts);  
  5. else {  
  6.     Intent intent = ad.intent;  
  7.     intent.addFlags(Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY  
  8.             | Intent.FLAG_ACTIVITY_TASK_ON_HOME  
  9.             | Intent.FLAG_ACTIVITY_NEW_TASK);  
  10.     if (DEBUG) Log.v(TAG, "Starting activity " + intent);  
  11.     context.startActivityAsUser(intent, opts,  
  12.             new UserHandle(UserHandle.USER_CURRENT));  
  13. }  
  滑動刪除任務(hide方法,需系統權限android.permission.REMOVE_TASKS)
[java] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. am.removeTask(ad.persistentTaskId, ActivityManager.REMOVE_TASK_KILL_PROCESS);  

  設置中強行停止應用(hide,需要非public權限)

[java] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. ActivityManager am = (ActivityManager)getActivity().getSystemService(  
  2.         Context.ACTIVITY_SERVICE);  
  3. 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。

    

[java] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);  
  2. ComponentName cn = am.getRunningTasks(1).get(0).topActivity;  
 4.void    killBackgroundProcesses (String packageName)

    殺死後臺進程,參數爲要被殺的程序的(主)包名。需要權限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.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章