Android 檢視手機記憶體使用情況(/proc/meminfo)
阿新 • • 發佈:2019-02-06
在Android開發和測試中,有時候需要獲取手機的總記憶體和可用記憶體大小,這個該如何實現呢?
我們可以通過讀取檔案"/proc/meminfo"的資訊獲取手機Memory的總量,而通過ActivityManager.getMemoryInfo(ActivityManager.MemoryInfo)方法可以獲取當前的可用Memory量。
"/proc/meminfo"檔案記錄了android手機的一些記憶體資訊,在命令列窗口裡輸入"adb
shell",進入shell環境,輸入"cat /proc/meminfo"即可在命令列裡顯示meminfo檔案的內容,具體如下所示。
cat /proc/meminfo MemTotal: 2806760 kB MemFree: 197620 kB Buffers: 56696 kB Cached: 909360 kB SwapCached: 0 kB Active: 1406036 kB Inactive: 476540 kB Active(anon): 924492 kB Inactive(anon): 11664 kB Active(file): 481544 kB Inactive(file): 464876 kB Unevictable: 7832 kB Mlocked: 80 kB SwapTotal: 0 kB SwapFree: 0 kB Dirty: 0 kB Writeback: 0 kB AnonPages: 924252 kB Mapped: 217876 kB Shmem: 11884 kB Slab: 306808 kB SReclaimable: 78768 kB SUnreclaim: 228040 kB KernelStack: 33360 kB PageTables: 34480 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 1403380 kB Committed_AS: 93553728 kB VmallocTotal: 251658176 kB VmallocUsed: 110656 kB VmallocChunk: 251386276 kB
MemTotal: 所有可用RAM大小(即實體記憶體減去一些預留位和核心的二進位制程式碼大小)。
MemFree:被系統留著未使用的記憶體。
Buffers: 用來給檔案做緩衝的大小。
Cached: 被高速緩衝儲存器(cache memory)用的記憶體的大小(等於 diskcache minus SwapCache ).
SwapCached:swap 快取的大小,Android很少使用swap的,經常為0。被高速緩衝儲存器(cache memory)用來交換空間的大小,用來在需要的時候很快的被替換而不需要再次開啟I/O埠。
Active: 在活躍使用中的緩衝或高速緩衝儲存器頁面檔案的大小,除非非常必要,否則不會被移作他用。
Inactive: 在不經常使用中的緩衝或高速緩衝儲存器頁面檔案的大小,可能被用於其他途徑。
SwapTotal:
交換空間的總大小。
SwapFree:
未被使用交換空間的大小。
要獲取android手機總記憶體大小,只需讀取"/proc/meminfo"檔案的第1行,並進行簡單的字串處理即可。
同時可以通過程式碼獲取總記憶體和可用記憶體。
private String getAvailMemory() {// 獲取android當前可用記憶體大小 ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); MemoryInfo mi = new MemoryInfo(); am.getMemoryInfo(mi); //mi.availMem; 當前系統的可用記憶體 return Formatter.formatFileSize(getBaseContext(), mi.availMem);// 將獲取的記憶體大小規格化 }
private String getTotalMemory() {
String str1 = "/proc/meminfo";// 系統記憶體資訊檔案
String str2;
String[] arrayOfString;
long initial_memory = 0;
try {
FileReader localFileReader = new FileReader(str1);
BufferedReader localBufferedReader = new BufferedReader(
localFileReader, 8192);
str2 = localBufferedReader.readLine();// 讀取meminfo第一行,系統總記憶體大小
arrayOfString = str2.split("\\s+");
for (String num : arrayOfString) {
Log.i(str2, num + "\t");
}
initial_memory = Integer.valueOf(arrayOfString[1]).intValue() * 1024;// 獲得系統總記憶體,單位是KB,乘以1024轉換為Byte
localBufferedReader.close();
} catch (IOException e) {
}
return Formatter.formatFileSize(getBaseContext(), initial_memory);// Byte轉換為KB或者MB,記憶體大小規格化
}