4、内存占用获取
4.1 当前内存使用情况
内存使用情况也是老生常谈的问题了,网上有很多资料,在此简单重温一遍。
方案一:cat /proc/meminfo
/proc/meminfo展示了系统内存使用情况,其中有两个关键指标:
- MemTotal:代表系统总内存大小,单位是KB
- MemFree:代表系统当前可用内存大小,单位是KB
在apk执行cat指令读取该文件可以获取到目标数值,无论是效率还是适用性都很高。
方案二:dumpsys meminfo
dumpsys meminfo + [pkg]通常用来查看指定进程包名的内存使用情况,如果不加包名,可以得到当前内存总量和可使用内存量,其中:
- Total RAM:内存总量
- Free RAM:可使用内存量
然而dumpsys meminfo耗时达到秒级,耗时较久,效率不高。
方案三:free
使用free命令可以查看系统当前内存使用情况,其中有两个关键数据:
- total:总内存大小
- used:已使用的大小
虽然也满足需求,但本方案和方案一和二,都是通过执行shell指令获取一串数据,因此需要对数据加以解析才能得到目标数据,在方案实现上稍微麻烦一点。
方案四:MemoryInfo 获取
ActivityManager服务是对Activity管理、运行时功能管理和运行时数据结构的封装,进程、应用程序、服务、任务信息等。通过 ActivityManager 获取到的 MemoryInfo 是整个设备的内存信息,主要包括:
- totalMem:内核可访问的总内存。
- availMem:系统上的可用内存。
- lowMemory:如果系统认为自己当前处于低内存状况,则设置为True。
- threshold:系统认为内存较低并开始杀死后台服务和其他非外部进程的可用阈值。
val memoryInfo = ActivityManager.MemoryInfo()
mActivityManager.getMemoryInfo(memoryInfo)
totalMemory = memoryInfo.totalMem
availMemroy = memoryInfo.availMem
该方案是针对应用层获取系统内存信息的API函数,在应用层获取内存信息,推荐使用该方案。
结论
获取内存使用情况的方法 | 效率 | 实现难度 | 推荐 |
---|---|---|---|
dumpsys meminfo | 低 | 中 | |
cat /proc/meminfo | 高 | 中 | |
free | 高 | 中 | |
MemoryInfo 获取 | 高 | 易 |