处理网络图片产生OOM异常的总结

一:产生原因分析

每个Android应用程序运行时都有一定的内存限制,限制大小视平台而定,个手机开发厂商的标准都不相同,因此在开发应用时需要特别关注自身应用的内存使用量,否则就容易出现内存溢出的情况,既OOM异常。常见的OOM异常主要是由程序中图片过多过大引起的,Android图片中有好多处理图片的框架,如ImageLoader,Fresco等。

二:解决方案

(1)每个Android手机屏幕尺寸有限,分配给图像的显示区域本身也就更小,图像大小可以做适当调整。例如当一个手机屏幕宽和高=320x480,一个图片的宽和高=3648x2736,计算图片的缩放比例时,宽度缩放比例=3648/320=5,缩放后的图片宽度为3648/11=331,高度为2736/11=248,缩放后图片的大小为331x248=882088x2B=160kb.

在程序中,调整图片的大小需要通过options的inJustDecodeBounds属性为true,将图片的width和heigth属性读取出来。我们可以利用这些属性对Bitmap进行压缩,同时通过Options.inSampleSize属性可以设置图片的压缩比。

(2)及时回收不用的图片资源

及时回收不用的图片资源,如果引用大量的Bitmap对象,而应用中又不仅需要同时显示所有图片,因此可以将暂时不用的Bitmap对象及时回收掉。回收Bitmap对象的具体代码如下:

public void releaseImage{

if(null!=bitmap){

  bitmap.recysle();

  bitmap=null; 

   }

 

}

 

(3)缓存图片到内存中

在Android应用程序中,有一个LruCach类专门用于处理图片缓存。该类的一个特点是当缓存的图片达到了预定设置的值时,则该类内部会根据最近最少使用的算法,移除最近使用次数最少的图片,以达到防止OOM溢出的目的。这个预先设定的值时允许当前内存分配给图片使用的最大内存空间,这个内存空间的大小是根据项目实际需求自行定义的,但一般设置为内存大小的1/8。获取应用内存大小的具体代码如下;

int MAXMEMORY = (int)(Runtime.getRuntime().maxMemory()/1024);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值