获取Android手机总内存和可用内存最佳方案

Android手机的内存大小信息存放在手机系统的/proc/meminfo文件中,可以通过读取这个文件来获取内存信息。

adb shell查看

  • 通过adb shell命令,进入终端
adb shell 
  • 执行cat /proc/meminfo,查看内存信息,命令如下:
cat /proc/meminfo

输出信息为:

MemTotal:        5788180 kB
MemFree:          202400 kB
MemAvailable:    1862008 kB
Buffers:          137020 kB
Cached:          1670164 kB
SwapCached:         9972 kB
Active:          2311504 kB
Inactive:         811540 kB
Active(anon):    1050552 kB
Inactive(anon):   408972 kB
Active(file):    1260952 kB
Inactive(file):   402568 kB
Unevictable:      122932 kB
Mlocked:          118792 kB
SwapTotal:       2621436 kB
SwapFree:        1916732 kB
Dirty:               116 kB
Writeback:             0 kB
AnonPages:       1433504 kB
Mapped:           728712 kB
Shmem:             20948 kB
Slab:             375252 kB
SReclaimable:     133676 kB
SUnreclaim:       241576 kB
KernelStack:       73744 kB
PageTables:        99356 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     5515524 kB
Committed_AS:   165453160 kB
VmallocTotal:   263061440 kB
VmallocUsed:           0 kB
VmallocChunk:          0 kB
CmaTotal:         204800 kB
CmaFree:            6112 kB

常用项介绍如下:

1)MemTotal: 所有可用RAM大小。(即物理内存减去一些预留位和内核的二进制代码大小) 
(2)MemFree: LowFree与HighFree的总和,被系统留着未使用的内存。 
(3)Buffers: 用来给文件做缓冲大小。 
(4)Cached: 被高速缓冲存储器(cache memory)用的内存的大小(等于diskcache minus SwapCache)。 
(5)SwapCached:被高速缓冲存储器(cache memory)用的交换空间的大小。已经被交换出来的内存,仍然被存放在swapfile中,用来在需要的时候很快的被替换而不需要再次打开I/O端口。 
(6Active: 在活跃使用中的缓冲或高速缓冲存储器页面文件的大小,除非非常必要,否则不会被移作他用。 
(7)Inactive: 在不经常使用中的缓冲或高速缓冲存储器页面文件的大小,可能被用于其他途径。 
(8)SwapTotal: 交换空间的总大小。 
(9)SwapFree: 未被使用交换空间的大小。 
(10)Dirty: 等待被写回到磁盘的内存大小。 
(11)Writeback: 正在被写回到磁盘的内存大小。 
(12)AnonPages:未映射页的内存大小。 
(13)Mapped: 设备和文件等映射的大小。 
(14)Slab: 内核数据结构缓存的大小,可以减少申请和释放内存带来的消耗。 
(15)SReclaimable:可收回Slab的大小。 
(16)SUnreclaim:不可收回Slab的大小(SUnreclaim+SReclaimable=Slab)。 
(17)PageTables:管理内存分页页面的索引表的大小。 
(18)NFS_Unstable:不稳定页表的大小。

代码获取

获取内存总大小


public static long getTotalMem() {
    try {
         FileReader fr = new FileReader(FILE_MEMORY);
         BufferedReader br = new BufferedReader(fr);
         String text = br.readLine();
         String[] array = text.split("\\s+");
         Log.w(TAG, text);
         // 单位为KB
         return Long.valueOf(array[1]);
     } catch (FileNotFoundException e) {
         e.printStackTrace();
     } catch (IOException e) {
         e.printStackTrace();
     }
     return -1;
 }

获取可用内存大小

public static long getFreeMem(Context context) {
      ActivityManager manager = (ActivityManager) context
               .getSystemService(Activity.ACTIVITY_SERVICE);
       ActivityManager.MemoryInfo info = new ActivityManager.MemoryInfo();
       manager.getMemoryInfo(info);
       // 单位Byte
       return info.availMem;
   }

小结

以上,亲测可用,如有问题欢迎留言交流~

猜你喜欢

转载自blog.csdn.net/u010358168/article/details/82630411
今日推荐