关于Bitmap优化的技术问题

本文探讨了Android中Bitmap优化的几个关键方法,包括及时回收Bitmap、异常捕获以防止OutOfMemoryError,以及如何通过压缩图片避免内存占用过高。通过设置BitmapFactory.Options的inJustDecodeBounds属性,可以在不分配内存的情况下获取图片尺寸,从而更好地控制图片加载。

关于Bitmap优化的技术问题

图片优化中常见的几种方法:

代码例子如下:

一,及时回收bitmap
一般来说,如果能够获得Bitmap对象的引用,就需要及时的调用Bitmap的recycle()方法来释放Bitmap占用的内存空间,而不要等Android系统来进行释放。

// 先判断是否已经回收 

if(bitmap != null && !bitmap.isRecycled()){   

        // 回收并且置为null 

        bitmap.recycle();   

        bitmap = null;   

}   

System.gc(); 

二,捕获异常
因为Bitmap是吃内存大户,为了避免应用在分配Bitmap内存的时候出现OutOfMemory异常以后Crash掉,需要特别注意实例化Bitmap部分的代码。通常,在实例化Bitmap的代码中,一定要对OutOfMemory异常进行捕获。

Bitmap bitmap = null; 

try { 

    // 实例化Bitmap 

    bitmap = BitmapFactory.decodeFile(path); 

} catch (OutOfMemoryError e) { 

    // 

} 

if (bitmap == null) { 

    // 如果实例化失败 返回默认的Bitmap对象 

    return defaultBitmapMap; 

} 

三, 压缩图片
使用BitmapFactory.Options设置inJustDecodeBounds为true后,再使用decodeFile()等方法,并不会真正的分配空间,即解码出来的Bitmap为null,但是可计算出原始图片的宽度和高度,即options.outWidth和options.outHeight。通过这两个值,就可以知道图片是否过大了。
“` python
BitmapFactory.Options opts = new BitmapFactory.Options();

// 设置inJustDecodeBounds为true 

opts.inJustDecodeBounds = true; 

// 使用decodeFile方法得到图片的宽和高 

BitmapFactory.decodeFile(path, opts); 

// 打印出图片的宽和高 

Log.d("example", opts.outWidth + "," + opts.outHeight); 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值