android应用程序图片OutOfMemory问题终级方案

来源:互联网 发布:淘宝账号被冻结支付宝 编辑:程序博客网 时间:2024/06/01 10:40

网上介绍这类的文章很多,这里我就不复制、粘贴了。说下自己遇到问题的过程吧。

原因:项目中在多个view进行切换时,因为图片问题,引起out of memery错误。但经过严格代码检查发现,从网络上加载图片时,都已经是使用SoftReference或WeakReference了,系统不是会自动回收吗?那么怎么还会有这种 out of memory问题呢?

思考:是不是打包在drawable中的图片的原因呢? 是不是应用程序中decode  drawable这个文件夹内的图片时,都是使用强引用来decode的呢? 如果是的话,那么改种实现会不会就好了呢?

解决方案:把drawable中的大图,放到工程的asset目录下,程序中在使用时,还是使用SoftReference来引用,结果该OOM问题解决。

总结:首先,在应用程序使用图片时,网上的那一些方法如:options设置等等,都是要注意的。其次:针对打包在应用内的特大图片,则不能直接放入drawable中进行引用,而是放到asset目录中进行动态解析,这样才能完全避免OOM问题。


注:此文已过时,目前最新的解决方案google官方已给出。如:使用LruCache,动态计算decode options等等。有兴趣的可查阅google文档。(2014-05-05)