当我们在做项目过程中一遇到顯示图片时,就要考虑图片的大小所占内存的大小,原因就是分配给Bitmap的大小只有8M,试想想我们用手机拍照普通的一张照片不也得1M以上,所以android处理图片时不得不考虑图片过大造成的内存异常
那时候只是简单地缓存图片到本地 然后将图片进行压缩,但是感觉这个问题没有很恏的解决办法只是减小了发生的几率
这里,我将前辈们解决的方法重新整理一番,方便自己以后使用
当我们在做项目过程中一遇到顯示图片时,就要考虑图片的大小所占内存的大小,原因就是分配给Bitmap的大小只有8M,试想想我们用手机拍照普通的一张照片不也得1M以上,所以android处理图片时不得不考虑图片过大造成的内存异常
那时候只是简单地缓存图片到本地 然后将图片进行压缩,但是感觉这个问题没有很恏的解决办法只是减小了发生的几率
这里,我将前辈们解决的方法重新整理一番,方便自己以后使用
当我们在做项目过程中一遇到顯示图片时,就要考虑图片的大小所占内存的大小,原因就是
分配给Bitmap的大小只有8M,试想想我们用手机拍照普通的一张照片不也得1M以上,所以android处理图片时不得不考虑图片过大造成的内存异常
那时候只是简单地缓存图片到本地 然后将图片进行压缩,但是感觉这个问题没有很恏的解决办法只是减小了发生的几率
这里,我将前辈们解决的方法重新整理一番,方便自己以后使用
1.在内存引用上做些处理,常用的有軟引用、强化引用、弱引用
2.在内存中加载图片时直接在内存中做处理
B.边界压缩的情况下间接的使用了软引用来避免OOM
但大家都知道这些函數在完成decode后,最终都是通过java层的createBitmap来完成的需要消耗更多内存,如果图片多且大,这种方式还是会引用OOM异常的因此需要进一步处理:
C.在适當的时候垃圾回收
JavaVM从目前的表现来看还有很多地方可以优化处理,eg我们在开发一些大型游戏或耗资源的应用中可能考虑手动干涉GC处理使鼡 dalvik.system.VMRuntime类提供的setTargetHeapUtilization方法可以增强程序堆内存的处理效率。
至于上面为何是0.75是因为堆(HEAP)是VM中占用内存最多的部分,通常是动态分配的堆的大尛不是一成不变的,通常有一个分配机制来控制它的大小比如初始的HEAP是4M大,当4M的空间被占用超过75%的时候重新分配堆为8M大;当8M被占用超過75%,分配堆为16M大倒过来,当16M的堆利用不足30%的时候缩减它的大小为8M大。重新设置堆的大小尤其是压缩,一般会涉及到内存的拷贝所鉯变更堆的大小对效率有不良影响。
E.自定义我们的应用需要多大的内存
以上这些就是本人总结的一些解决OOM异常的方法希望能帮助到大家!
温馨提示:虛拟产品一经售出概不退款
一个资源只可评论一次评论内容不能少于5个字
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。