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异常的方法希望能帮助到大家!

}
身份认证VIP会员低至7折

温馨提示:虛拟产品一经售出概不退款

一个资源只可评论一次评论内容不能少于5个字

如果觉得有用,不妨留言支持一下
}

我要回帖

更多关于 解决内存溢出问题 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信