本文有大招,APP内存占用从175M优化到97M,使用GIMP查看大内存图片。然后针对性优化。我相信大家对Memory Analyzer (MAT)并不陌生,但是那里面巨大的对象到底是什么,你不好奇吗?比如:
这个图里,你知道这11M是什么吗?如果你已经明白我的意思,你可以撤了!如果不能,请继续!如果你不会用mat,请看文后补充。
首先,通过list objects 查看incoming references,我们看到了这样一个东西:
很明显,它是一张图片,相信你也好奇,这是那张图片呢?现在GIMP登场了。请自行下载。我假设你已经下载好了,现在,我们选中这个mBuffer,然后你可以看到相关属性,在属性页,我们把这个mBuffer存储到文件里,如下图:
存储的时候,你一定要选择一个路径,不要直接输入文件名,那样会存储到mat的目录去,不好找。存储的后缀必须是.data,这里,我命名为了big.data,现在,我们用GIMP打开它。
第一项,你需要选择下,默认是RGB,需要选为RGB Alpha,宽高你填写属性页看到的即可!然后就可以查看了。
其实,这张图是我们APP里字号页的背景!其他图则是APP里的大图,对此,我的优化方案是:APP里的大图采用565编码,小图8888,比如icon等,因为565可能会让图片变绿!!!这张背景图,我直接移到了xxxhdpi,第二次运行,然后发现这张图只占了2M内存。
以上测试是在华为6P上进行的,在大图没优化前,APP内存占用为175M(多次GC后的内存占用,另外,导出hprof文件的时候也需要多次GC,否则导出的文件可能不可用!)优化后只有97M,执行的测试用例是同一个,足见大图优化在APP开发里何其重要,平时,优化3-5M已经不易了!如果你对我写的抱有怀疑,请大胆的下载老字号APP体验,现在线上版本是未优化的,你看下在大分辨率手机上内存占用是否很大,当下次更新的时候再看看是否还占用很大即可!下面是具体的hprof文件分析图,第一张是未优化的,第二张是优化后的。足以清晰的看到内存占用,怎么样,还不快去看看,你的APP是否可以如法优化不少内存呢?
mat的使用
首先,你需要把Android Studio导出的hprof文件转换下,如果你还不会导出,那你百度吧,如果你Android环境变量没有配置,那你百度吧。假设你导出的文件是:1.hprof,现在转换:hprof-conv 1.hprof big.hprof 这个命令就可以将文件转换为big.hprof 了,然后用mat打开,弹出的窗口选第1项即可!如下图:
至于本文第1张图怎么打开的,那是在override标签下点击:dominator tree出现的。如果你还有疑问,请评论,我会回复。