我正在编写一个需要测量当前可用/已用 RAM 的 Android 应用程序。
搜索该站点显示了多个主题相似的主题,这些主题通常建议两种方法:
方法一:
MemoryInfo mi = new MemoryInfo();
ActivityManager activityManager = (ActivityManager)getSystemService(ACTIVITY_SERVICE);
activityManager.getMemoryInfo(mi);
long availableMegs = mi.availMem / 1048576L;
totalMegs = mi.totalMem / 1048576L; //available since API 16 only
方法二:解析/proc/meminfo。
我已经尝试了这两种方法,它们似乎工作正常。我从两种方法中得到相同的值。我的问题是,当我转到Settings -> Apps -> Running
屏幕底部时,会显示有关可用/已用 RAM 的信息,这与我通过上述方法获得的信息不同。我怀疑谷歌确实将缓存的应用程序报告为可用内存,因为当我杀死一些缓存的进程时,谷歌报告的 RAM 使用量几乎没有变化,但我的应用程序的数量接近我刚刚杀死的正在运行的进程的大小。
例子:
方法1输出:
meminfo: avail: 660, total: 821, used: 161
方法2输出:
root@android:/proc # cat meminfo
MemTotal: 840868 kB
MemFree: 548080 kB
Buffers: 0 kB
Cached: 128300 kB
SwapCached: 0 kB
Active: 192052 kB
Inactive: 79816 kB
Active(anon): 157792 kB
Inactive(anon): 0 kB
Active(file): 34260 kB
Inactive(file): 79816 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 143580 kB
Mapped: 67584 kB
Slab: 6736 kB
SReclaimable: 2104 kB
SUnreclaim: 4632 kB
PageTables: 4008 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 420432 kB
Committed_AS: 1606616 kB
VmallocTotal: 122880 kB
VmallocUsed: 20588 kB
VmallocChunk: 77828 kB
MemFree + Cached = 660MB
Android reported RAM usage: 679MB Free, 142MB used.
如何获得与 Android 报告相同的数字?
我认为我必须从中获取它,/proc/meminfo
因为官方 API 似乎不存在。