介紹
ActivityManager雖然名爲Activity管理器,其實際功能比類名描述的廣泛,定義的方法涵蓋了內存、進程、任務、設備等相關功能。因此,將ActivityManager理解爲AppManager,更符合這個類。
內存相關
1、api
方法 | 返回值 | 解釋 |
---|---|---|
getMemoryClass() | int | 返回當前設備爲每個應用程序分配的內存,單位M |
getLargeMemoryClass() | int | 返回當前設備爲每個應用程序分配的最大內存,單位M |
getMemoryInfo(ActivityManager.MemoryInfo outInfo) | MemoryInfo | 系統內存狀態的信息 |
getMyMemoryState(ActivityManager.RunningAppProcessInfo outState) | 爲調用進程返回全局內存狀態信息 | |
getProcessMemoryInfo(int[] pids) | MemoryInfo[] | 返回關於一個或多個進程的內存使用情況的信息 |
isLowRamDevice() | boolean | 返回是否是一個低ram設備 |
setWatchHeapLimit(long pssSize) | 請求系統監視調用進程的堆限制大小,如果超過pssSize,會自動進行堆轉儲操作 | |
clearWatchHeapLimit() | 清除之前由setWatchHeapLimit(long)設置的Watch Heap限制 | |
dumpPackageState(FileDescriptor fd, String packageName) | 執行與給定應用程序包名稱相關的各種狀態的系統轉儲。此調用在執行轉儲時會阻塞,因此不應在 UI 線程上執行。數據將作爲文本寫入給定的文件描述符 |
2、getMemoryInfo 方法
返回系統的內存信息,用於幫助開發者管理內存。不建議輪詢。優先使用onTrimMemory。
public void memoryInfo(View view) {
ActivityManager.MemoryInfo info = new ActivityManager.MemoryInfo();
manager.getMemoryInfo(info);
log("info.totalMem:"+toMb(info.totalMem));
log("info.availMem:"+toMb(info.availMem));
log("info.threshold:"+toMb(info.threshold));
log("info.lowMemory:"+info.lowMemory);
}
MemoryInfo屬性
屬性 | 說明 |
---|---|
totalMem | 總內存 |
availMem | 系統可用內存 |
threshold | 低內存閾值,即低內存的臨界線 |
lowMemory | 是否爲低內存狀態 |
3、getMyMemoryState 方法
返回調用進程的全局內存狀態,只會寫入以下字段
public void memoryState(View view) {
ActivityManager.RunningAppProcessInfo info = new ActivityManager.RunningAppProcessInfo();
ActivityManager.getMyMemoryState(info);
log("info.pid:"+info.pid);
log("info.uid:"+info.uid);
log("info.lastTrimLevel:" + info.lastTrimLevel);
log("info.importance:" + info.importance);
log("info.lru:" + info.lru);
log("info.importanceReasonCode:" + info.importanceReasonCode);
}
RunningAppProcessInfo屬性
屬性 | 說明 |
---|---|
pid | 進程ID |
uid | 進程所在的用戶ID |
lastTrimLevel | 報告給進程的最後內存修剪級別 |
importance | 該進程的相對重要級別,值越小級別越高 importance值的意義 |
lru | 當importance == 400 ,即IMPORTANCE_CACHED 時,這個數字纔有意義 |
importanceReasonCode | importance取值的原因 |
進程相關
1、api
方法 | 返回值 | 解釋 |
---|---|---|
killBackgroundProcesses(String packageName) | 讓系統立即終止與給定包關聯的所有後臺進程 | |
getProcessesInErrorState() | List ActivityManager.ProcessErrorStateInfo | 返回當前處於錯誤狀態的所有進程的列表 |
getRunningAppProcesses() | List ActivityManager.RunningAppProcessInfo | 返回在設備上運行的應用程序進程列表 |
getRunningServiceControlPanel(ComponentName service) | PendingIntent | 返回一個 PendingIntent,您可以顯示給定服務的控制面板。如果服務沒有控制面板,則返回 null |
getRunningServices(int maxNum) | List ActivityManager.RunningServiceInfo | 返回當前運行的Services列表 |
任務相關
1、api
方法 | 返回值 | 解釋 |
---|---|---|
getAppTasks() | List AppTask | 獲取與應用程序關聯的任務列表 |
addAppTask(Activity activity, Intent intent, ActivityManager.TaskDescription description, Bitmap thumbnail) | int | 添加一個ActivityManager.AppTask |
getAppTaskThumbnailSize() | Size | 返回用於當前 ActivityManager.AppTask縮略圖的當前設計尺寸,用於addAppTask(Activity, Intent, ActivityManager.TaskDescription, Bitmap) |
getLockTaskModeState() | int | 返回當前任務鎖定狀態 |
moveTaskToFront(int taskId, int flags, Bundle options) | 請求與給定任務ID關聯的任務被移動到堆棧的前面,因此用戶現在可以看到它 | |
moveTaskToFront(int taskId, int flags) | 同上 |
getAppTasks
獲取與應用程序關聯的任務列表。
Task
一些相關聯的activity的集合,但activity之間不一定非得相關聯。當我們按home鍵旁邊那個方形鍵(recent-apps)時,屏幕上展示的就是一個個task。
設備相關
1、api
方法 | 返回值 | 解釋 |
---|---|---|
getDeviceConfigurationInfo() | ConfigurationInfo | 獲取設備配置屬性 |
getLauncherLargeIconDensity() | int | 獲取啓動器圖標的首選密度 |
getLauncherLargeIconSize() | int | 獲取首選的啓動器圖標大小。這在創建自定義可繪製對象時使用(例如,用於快捷方式) |
clearApplicationUserData() | boolean | 允許應用程序從磁盤中擦除自己的數據。這相當於用戶選擇從設備設置 UI 中清除應用程序的數據。它會刪除與應用程序相關的所有動態數據——其私有數據和外部存儲上其私有區域中的數據——但不會刪除已安裝的應用程序本身,也不會刪除任何 OBB 文件。它還撤銷應用程序已獲得的所有運行時權限,清除所有通知並刪除與此應用程序相關的所有 Uri 授權 |