天天看點

android擷取程序記憶體,android擷取程序資訊,運作記憶體資訊

public static List getTaskInfos(Context context) {

//首先擷取到程序管理器

ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);

//擷取到運作的程序

List runningAppProcesses = activityManager.getRunningAppProcesses();

//初始化程序的集合

List taskInfos = new ArrayList<>();

//疊代所有正在運作的程序

for (ActivityManager.RunningAppProcessInfo runningAppProcess : runningAppProcesses) {

TaskInfo taskInfo = new TaskInfo();

//擷取到程序的名字

String processName = runningAppProcess.processName;

taskInfo.setAppPackageName(processName);

//擷取到程序的記憶體的基本資訊

Debug.MemoryInfo[] processMemoryInfo = activityManager.getProcessMemoryInfo(new int[]{runningAppProcess.pid});

int totalPrivateDirty = processMemoryInfo[0].getTotalPrivateDirty() * 1024;

taskInfo.setMemorySize(totalPrivateDirty);

}

return taskInfos;

}

通過讀取系統檔案的方式,獲得運作記憶體大小

//擷取總記憶體的大小

private long getTotalMemory() {

// MemTotal: 341780 kB

try {

FileInputStream fis = new FileInputStream(new File("/proc/meminfo"));

//包裝一個一行行讀取的流

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fis));

//取到所有的記憶體資訊

String memTotal = bufferedReader.readLine();

StringBuffer sb = new StringBuffer();

for (char c : memTotal.toCharArray()) {

if (c >= '0' && c <= '9') {

sb.append(c);

}

}

//為了友善格式化 是以乘以1024

long totalMemory = Long.parseLong(sb.toString()) * 1024;

return totalMemory;

} catch (Exception e) {

e.printStackTrace();

return 0;

}

}殺死程序(重要系統程序殺不掉)

//擷取到程序管理者

ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);

//殺死背景程序

activityManager.killBackgroundProcesses(應用程式包名);