解決在 Android 中使用 Bitmap 造成 Out of memory 的方法~
2014-11-27 14:51
387 查看
原 解決在
Android 中使用 Bitmap 造成 Out of memory 的方法~
发表于3年前(2012-04-24 11:45) 阅读(1377) | 评论(0) 5人收藏此文章, 我要收藏赞0
因为Android本身的限制,在2.x版中使用 Bitmap 只要遇到稍大一点的图,很容易就会遇到 out of memory 的状况,在经过一阵搜寻之后,一直没有很好的方法,有很多网站介绍的方法是把原图 subsample,但对于图片quality有要求的程序来说,这可是不被接受的解法,搞了半天,最后只好直接把 Android 的 source code 拿出来瞧瞧看看是否有什么机会解决这个问题,突然发现原来这个问题竟然有个投机取巧的解决方法。
目前在网站上找到的结果,效果最有效的是使用
BitmapFactory.Options
将里面的 inPurgeable 设定为 true,这样可以让java系统内存不足时先行回收部分的内存,这个方法其实已经解决大部分的问题了,不过生出来的内存还是算在java 的VM里总是有些美中不足。
在看了source code 之后,我发现在BitmapFactory.Options里竟然有一个inNativeAlloc的public变量,可以直接不把使用的内存算到VM里,有趣的是这个变量是个隐藏版的变量,所以在正常的SDK文件中看不到,用eclipse时也不会提示你,也不能直接用,因此我用了一些小技巧将这个变量设成true,如此一来bitmap out of memory的问题发生的机率又更低了,以下就是目前的程序代码,有需要的人可以参考一下,不过不管怎么样,bitmap这东西,只要不用了,还是请尽量将它recycle,不然再多内存也是不够用地~
public Bitmap decodeFile(String filePath){ Bitmap bitmap = null; BitmapFactory.Options options = new BitmapFactory.Options(); options.inPurgeable = true; try {BitmapFactory.Options.class.getField("inNativeAlloc").setBoolean(options,true); } catch (IllegalArgumentException
e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } if(mFilePath != null) { bitmap = BitmapFactory.decodeFile(mFilePath,
options); } return bitmap;}
相关文章推荐
- 解決在 Android 中使用 Bitmap 造成 Out of memory 的方法~
- Android中图片过大造成内存溢出,OOM(OutOfMemory)异常解决方法(1)
- Android 中 加载Bitmap时,造成的Out of memory 问题
- Android中使用Bitmap会出现OutOfMemory的原因(转)
- Android-避免出现bitmap内存限制OUT OF MEMORY的一种方法
- Android中使用Bitmap会出现OutOfMemory的原因(转)
- Android中使用Bitmap会出现OutOfMemory的原因
- Android java.lang.OutOfMemoryError: bitmap 解决方法
- Android Bitmap OutOfMemory 解决的方法
- Android中使用Bitmap会出现OutOfMemory的原因(转)
- Android中图片过大造成内存溢出,OOM(OutOfMemory)异常解决方法(4)
- Android-避免出现bitmap内存限制OUT OF MEMORY的一种方法
- Android-避免出现bitmap内存限制OUT OF MEMORY的一种方法
- Android BitmapFactory.decodeStream方法OutOfMemoryError 解决方法
- Android-避免出现bitmap内存限制OUT OF MEMORY的一种方法
- Android中图片过大造成内存溢出,OOM(OutOfMemory)异常解决方法(2)
- Android-避免出现bitmap内存限制OUT OF MEMORY的一种方法
- Android中图片过大造成内存溢出,OOM(OutOfMemory)异常解决方法(3)
- Android-避免出现bitmap内存限制OUT OF MEMORY的一种方法
- Android中使用Bitmap会出现OutOfMemory的原因分析,很全面