android开发内存优化之如何有效避免oom

来源:互联网 发布:2016淘宝买家秀木耳 编辑:程序博客网 时间:2024/05/16 03:31

在android开发中,特别是一些图片数量特别大特别多的项目中经常会遇到OOM也就是OutOfMemoryError

在开发中我们如何去避免oom呢?

一.上面说到图片多的应用容易发生oom,这里就要提到一个内存优化必须提到的吃内存的大胖子bitmap,通常我们在开发中通过下面两种方式来优化

1.在图片载入内存之前计算合适的缩放比例,避免大图的载入浪费内存

2.使用更加节省内存的解码方式,ARGB_8888比RBG_565所需的内存要大一倍

3.bitmap要及时回收

二.在数据结构上

1.减少内存的开销要尽量使用更加轻量型的数据结构,我们要优先考虑android专用的ArrayMap和SparseArray数据结构而不是HashMap等传统型的数据结构,传统型数据结构效率低下更占内存

2.在android开发中要避免使用Enum,也就是枚举

3.在字符串拼接中尽量使用StringBuilder而不是"+"

三.在向res里添加图片资源时,尺寸,大小,清晰度都要考虑,力争适合的尺寸,最小的占存最好的清晰度

四.Android系统本身内置了很多的资源,例如字符串/颜色/图片/动画/样式以及简单布局等等,这些资源都可以在应用程序中直接引用。这样做不仅仅可以减少应用程序的自身负重,减小APK的大小,另外还可以一定程度上减少内存的开销,复用性更好。但是也有必要留意Android系统的版本差异性,对那些不同系统版本上表现存在很大差异,不符合需求的情况,还是需要应用程序自身内置进去。

五.列表控件的使用优化listview,gridview,recyclerview等 使用viewholder对convertview的复用等

六.避免对象的内存泄漏,使用leakcanary等第三方开源控件对APP内存泄漏的检测

1.能使用application的context就不要使用activity的context,可以避免activity不能释放而导致的泄漏

2.webview的泄漏问题在android比较严重,因为碎片化严重,不同版本不同厂家的webview都有差别,这里提供一个解决webview泄漏的方案http://www.jianshu.com/p/bb778d5959e2

3.操作数据库时会用到cursor对象,cursor对象一定要及时关闭否则会泄露

七.优化布局层次,减少内存消耗,越扁平化的视图布局,占用的内存就越少,效率越高。我们需要尽量保证布局足够扁平化,当使用系统提供的View无法实现足够扁平的时候考虑使用自定义View来达到目的。

八.谨慎使用依赖注入框架和第三方library,这些都会增大内存的消耗


此文仅作为本人开发总结查漏补缺只用,如果能对他人有所帮助也是极好的


0 0
原创粉丝点击