欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

搞定App内存问题:一步步分析和优化内存泄漏的方法

最编程 2024-08-03 09:07:39
...

根据以往经验,其实做内存优化最先要搞定的应该是内存中的大头,这类大头对内存的占用很大,也是内存问题的主要祸首,相对来说比较容易定位问题,且优化后效果也非常明显,性价比非常高。

事实上很多优化都是这样,比如减包大小的优化,也是要先分析出主要大头祸首,比如可能你的包里包含了一张3M大小的无用图片,如果你没找到这种祸首,可能你做了大量的工作去想办法减少无用代码等,最终可能只有几百K的收益。

相对内存来说,这个大头就是:

  • 内存泄漏
  • 图片

所以首先你要确保你的应用里没有存在内存泄漏,然后再去做其他的内存优化。

内存泄漏检测

现在内存泄漏的检测已经变得非常简便了,使用App后在Android Profiler中先触发GC然后dump内存快照,之后点击按package分类,就可以迅速查看到你的App目前在内存中残留的class,点击class即可在右边查看到对应的实例以及引用对象。

当然你也可以在debug下集成LeakCanary做内存泄漏监控警告

排除内存泄漏后,图片就是另一个占用内存大头的对象了。

图片

对于图片来说一个是颜色模式,检查一下项目里的图片的颜色模式,是否可以降低,比如从RGB_8888降到RGB_565,则每张图片可以节省1/2的内存,如果没有使用到透明通道等的话基本上肉眼看不出差别。

还有一个是降低图片的大小,可能你的ImageView只有你图片的一半大,则这部分内存就大大浪费了,我们项目服务端会根据前端的参数做动态切图。

前端也可以通过降低采样率(inSampleSize)来达到降低图片占用内存大小的目的,但是这个采样率InSampleSize只能是整数(甚至只能是2的次方),如果inSampleSize=2,则最终内存占用就会是原来的1/4,适用于图片过大很多的情况,对于只是想做小幅度压缩的话,基本没用。

ok,接下来开始做具体的内存分析与稍微细致一点的内存优化。

推荐阅读