Android中ActivityManager学习笔记
? ? 在之前寫過2篇關于ActivityManager的文章,如下所示。都是通過實戰去了解里面的信息,現在感覺太繁瑣,所以做一個api介紹比較詳細。就像之前學習Telephony那樣,對整體了解整個ActivityManager很有用。
ActivityManager
? ? android.app包,含有6個內部類:
MemoryInfoProcessErrorStateInfoRecentTaskInfoRunningAppProcessInfoRunningServiceInfoRunningTaskInfo
? ? 先從ActivityManager API下手。
Constants
META_HOME_ALTERNATE
? ? 主activity中的標簽值
MOVE_TASK_NO_USER_ACTION
? ? 對于用戶策動的活動,當前activity不會收到提示
MOVE_TASK_WITH_HOME
? ? 將后面的任務立即移動到前面
RECENT_IGNORE_UNAVAILABLE
? ? 提供一份不包含任何當前任務的列表,這些任務對于用戶是不可見的
RECENT_WITH_EXCLUDED
? ? 返回所有的任務
Methods
public boolean clearApplicationUserData ()
? ? 清楚用戶數據
public void dumpPackageState (FileDescriptor fd, String packageName)
? ? 獲取相應包名對應的apk的各種狀態信息
public ConfigurationInfo getDeviceConfigurationInfo ()
? ? 獲取設備配置信息
public int getLargeMemoryClass ()
? ? 當一個應用程序在一個大的堆棧空間里運行時,估算當前設備中每一個應用內存片段的值
public int getLauncherLargeIconDensity ()
? ? Lancher啟動器的圖標像素密度
public int getLauncherLargeIconSize ()
? ??啟動器圖標大小
public int getLauncherLargeIconSize ()
? ? 當前設備每個應用的內存分類,就是內存的底線。低于這個值應用就會崩潰。
public void getMemoryInfo (ActivityManager.MemoryInfo outInfo)
? ? 當前系統的內存信息
public static void getMyMemoryState (ActivityManager.RunningAppProcessInfo outState)
? ? 返回調用者進程的全局內存狀態信息。
public MemoryInfo[] getProcessMemoryInfo (int[] pids)
? ? 進程所使用的內存信息
public List getProcessesInErrorState ()
? ? 當系統發生錯誤的時候,獲取當前運行的一些進程的信息
public List getRecentTasks (int maxNum, int flags)
用戶啟動的任務列表
public List getRunningAppProcesses ()
? ? 當前設備運行著的應用進程信息
public PendingIntent getRunningServiceControlPanel (ComponentName service)
? ? 返回一個PendingIntent,該PendingIntent會啟動一個控制面板,里面會顯示當前系統運行的一系列服務。
public List getRunningServices (int maxNum)
? ? 當前運行的服務信息
public List getRunningTasks (int maxNum)
? ? 當前系統運行的任務信息
public boolean isLowRamDevice ()
? ? 是否是低內存的設備
public static boolean isRunningInTestHarness ()
? ? 判斷設備是否運行在測試框架中
public static boolean isUserAMonkey ()
? ? 判斷當前設備是否被Monkey亂點中
public void killBackgroundProcesses (String packageName)
? ? 殺死對應包的后臺進程
public void moveTaskToFront (int taskId, int flags, Bundle options)
public void moveTaskToFront (int taskId, int flags)
? ? 講給定的id對應的任務移動到任務棧隊列的最前面。
public void restartPackage (String packageName)
? ? 在API 8中已廢除
? ??Nested class
MemoryInfo
? ? 通過getMemoryInfo(ActivityManager.MemoryInfo)獲得該對象,可以用來檢索有效的內存信息
Fields
public long availMem
? ? 系統中的可見內存
public boolean lowMemory
? ? 系統判斷自己是否處于低內存的情況
public long threshold
? ? 當內存太低,開始殺死后臺服務和其他非外來的進程時,內存的臨界值
public long totalMem
? ? 內核中所有內存數
ProcessErrorStateInfo
? ? 在發生錯誤時,檢索內存中的有關信息
Constans:
? ??int CRASHED:奔潰
? ??int NOT_RESPONDING:無回應
? ??int NO_ERROR:0.狀況碼,無錯誤
Fields
? ? public int condition:進程中的狀態碼
? ? public byte[] crashData:(已經被棄用),空值
? ? public String?longMsg:一個表述錯誤狀態的長信息
? ? pubic int pid:進程id
? ? pubic String processName:發生錯誤或奔潰的進程的進程名稱
? ? public String shortMsg:錯誤碼的縮寫
? ? public String stackTrace:錯誤發生時的堆棧跟蹤信息
? ? public String?tag:與錯誤有關的activity名
? ? public int uid:用戶id
RecentTaskInfo
? ? 用戶最近訪問和啟動的任務信息
Fields
? ? public Intent baseIntent:啟動任務的原始Intent,可以用它重啟任務或者將當前任務移動到任務列表的最前面
? ? public CharSequence description:描述任務上次的狀態
? ? public int id:唯一標識當前運行的任務
? ? public ComponentName origActivity:intent啟動的實體控件
? ? public int persistentId:任務的永久id號,不管該任務有沒有運行
RunningAppProcess
? ? 與正在運行的進程有關信息可以通過該類獲得。
Constants
? ? IMPORTANCE_BACKGROUND:importance變量的值之一。處于后臺,但是仍然消耗資源的進程
? ? IMPORTANCE_EMPT:importance變量的值之一。空進程
? ? IMPORTANCE_FOREGROUND:importance變量的值之一。處于用戶界面的進程。
? ? IMPORTANCE_PERCEPTIBLE:同上。仍然運行著某些對用戶有用的的東西
? ? IMPORTANCE_SERVICE:同上。該進程包含仍在運行的服務
? ? IMPORTANCE_VISIBLE:同上。運行某些對用戶可見的東西,但不是立即顯示在UI界面上,
? ? REASON_PROVIDER_IN_USE:importanceReasonCode變量的值之一。應用的content provider中正被其他進程調用
? ? REASON_SERVICE_IN_USE:同上。
? ? REASON_UNKNOWN:同上。無特殊原因
Fields
? ? public int importance:重要性等級
? ? public int importanceReasonCode:重要原因code
? ? public ComponentName importanceReasonComponent:到當前進程中使用的組件名
? ? public int importanceReasonPid:進程客戶端其他進程的進程id。
? ? public int lastTrimLevel:報告給進程最后內存的等級
? ? public int lru:近期最少使用算法,即為importance進行排序。
? ? public int pid:進程id
? ? public String[] pkgList:該進程加載的所有包名
? ? public String processName:與當前對象相關的進程名稱
? ? public int uid:用戶id
RunningServiceInfo
? ? 當前系統中運行的特殊服務
Constants
? ? FLAG_FOREGROUND:前臺進程
? ? FLAG_PERSISTENT_PROCESS:持續進程
? ? FLAG_STARTED:已啟動
? ? FLAG_SYSTEM_PROCESS:核心系統進程
Fields
? ? public long activeSince:第一次啟動的時間
? ? public int clientCount:連接到該服務的客戶端數量
? ? public int clientLabel:客戶端標簽
? ? public String clientPackage:客戶端包名
? ? public int crashCount:在服務運行過程中奔潰的次數
? ? public int flags:運行標志
? ? public boolean foreground:判斷是否位于前端UI界面上
? ? public long lastActivityTime:最后的活動時間
? ? public int pid:進程id
? ? public String process:服務所在的進程名
? ? public?long?restarting:重新啟動的時間,如果非空,代表該服務當前不在運行。等待一段時間后重啟。
? ? public ComponentName service:服務組件
? ? public boolean started:是否已經啟動
? ? public int uid:用戶id
RunningTaskInfo
? ? 當前在系統中運行的特定任務信息,這些任務不是意味著有進程活動的任務,而是簡單的標識用戶已經離開該任務,但是沒有關閉,但是當前系統可能會殺死該進程,只支持它的狀態,等用戶返回后重新啟動。
Fields
? ? public ComponentName baseActivity:任務中第一次啟動的activity.
? ? public CharSquence description:任務當前狀態的描述
? ? public int id:任務id
? ? public int numActivities:當前任務中活躍的activity數
? ? public in numRunning:當前任務中運行的activity數(沒有停止和持續的activity)
? ? public Bitmap thumbnail:當前狀態的縮略圖
? ? public ComponentName topActivity:任務歷史棧最上層的activity.
? ??總結
? ? 這一篇文章從ActivityManager講起,逐漸講解了其中的6個內部類,代表程序運行過程中所涉及到的各個進程、app、service、task的信息。對ActivityManager所管理的內容有了初步的了解。
總結
以上是生活随笔為你收集整理的Android中ActivityManager学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 算法竞赛入门经典读书笔记(三)7.2枚举
- 下一篇: iOS开发:动态添加按钮