1. 程式人生 > >Android 檢視手機記憶體使用情況(/proc/meminfo)

Android 檢視手機記憶體使用情況(/proc/meminfo)

在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,記憶體大小規格化 
}