android开发了,因为应用中总免不了图片的使用和各种数据的加载,所以程序会出现oom也是可想而知的,那如何避免呢。

6点:

:老的换新的。

android提供的新技术来代替以前过时的,或者不提倡使用的。例如使用新控件来代替一些老控件,例如用RecylerView代替ListView,还有Google出的网络请求的一些新技术。这个就需要大家多了解android新的一些变动;或者自己可以根据项目的需求来写一些控件或者使用第三方控件,以便统一控制内存回收,效率提高,例如好几个项目都用到了很多子项滑动并且变大的显示,就需要咱们统一做个控件来实现了。还有大家都常用的imageloader也是个很好的控件例子,当然imageloader也有缓存机制,这个就是后话了。

:图片入缓存。

android后面出的LruCache类等,或者就是自己根据hashmap写一些东东来缓存图片。

:图片放本地。

     由于缓存还是在内存中,所以不宜过多,那么如果图片过多怎么办,就需要存储到本地了,但是存多少张或者存多大这个就需要开发者仔细斟酌了。

:大图变小图。

oom,所以可以考虑是否可以把图片变小或者压缩,或者分辨率变差些,如果可以接受的话,也是可以有效减小程序oom的几率。

:对于不同网速,下载解码图片的不同。

4G很普及,但是2G手机也有很多,但网速也有可能很差,所以关于这一点,我将会简单介绍下,这个方法在imageloader中也有使用.

:其他的一些代码或者处理技巧。这个我会简单说下。

     针对上面所说的解决方法,我会一一详细说明下,所以文章可能会有些长,但是我相信,当看完后,对于内存溢出的问题大家定有一番收获,如果遇到面试问此类问题或者项目实践时,我也相信大家会游刃有余解决。废话不多说,大家继续往下看:

1,这个主要靠平时大家对新技术的关注与积累,以下是两个链接,分别是RecylerView和volley的讲解,RecylerView是可以替代gallery和listview等,效率比它们都高。然后volley是适合快速,简单的请求的网络架构,其实从英语单词意思,大家应该也可以理解它们的意思了吧,啥,你说你四级没过,看不懂,好吧,自己下个灵格斯翻译着看吧,哈哈。


lrucache和本地存储的一个例子,例子的关键代码我会贴上讲解,可是已经有人做讲解了,那好吧 ,贴出它的地址,让大家瞅瞅,反正lrucache原理就是开发者自己设定缓存大小,超出后,就开始清理。

4和6,有人也做了部分讲解,大家可以看看,这个纯粹就是方法的使用技巧了。

5,我在上面也讲了,就是imageloader也用了这个方法,因为每一次图片的下载最终都会通过BitmapFactory.decodeStream解析成Bitmap,供ImageView显示。可是在慢速网络需要使用FlushedInputStream来处理。因为在慢速网络中,

BitmapFactory.decodeStream无法正确解析完整的图片。