大尺寸图片的性能和内存优化

Android程序优化,通常是指性能和内存的优化,更快的响应速度,更低的内存占用。

大尺寸的图片在进行显示的时候都会需要性能和内存的优化。


如果直接调用setImageResource(resId)的话,运行的时候会调用BitmapFactory.decodeStream()方法将资源图片生成一个Bitmap, 然后由这个Bitmap生成一个Drawable,最后再将这个Drawable设置到ImageView。
因为生成了Bitmap,如果图片过大,就会导致性能和内存占用问题。

这个时候需要根据目标尺寸重新生成Bitmap然后将生成后的Bitmap设置到ImageView上, 具体的方法:

1, 将BitmapFactory.Options的InJustDecodeBounds设置true

2,调用BitmapFactory.decodeResource(getResources(), resId, options)不会在内存中生成Bitmap,而只是得到原始图片的属性(width,height,type and etc)

3, 根据目标尺寸重新计算options.inSampleSize,这个值的意思图片的宽高按比例缩小。比如一张图片的大小是2000×1000,如果inSampleSize=2,那么缩小后的图片大小是1000×500,即为原来的1/4.

4, 将BitmapFactory.Options的InJustDecodeBounds重新设回false,保证再次调用BitmapFactory.decodeResource(getResources(), resId, options)会生成Bitmap对象。

5,调用ImageVIew对象的setImageBitmap(bitmap)方法,将生成后的Bitmap对象设置到ImageView。


Bitmap占用的内存为:像素总数×每个像素占用的内存。四种像素类型:ARGB_8888,ARGB_4444,ARGB_565,ALPHA_8,每个像素占用的字节数是4,2,2,1.因此一个2000×1000的ARGB_8888类型的Bitmap占用的内存大约为:2000×1000×4=7.63M。


 Android根据设备屏幕尺寸和dpi的不同,给系统分配的单应用程序内存大小也不同,具体如下表(表格取自Android 4.4 Compatibility Definition Document (CDD)):

屏幕尺寸 DPI 应用内存
 small / normal / large ldpi / mdpi 16MB
 small / normal / large tvdpi / hdpi 32MB
 small / normal / large xhdpi 64MB
 small / normal / large 400dpi 96MB
 small / normal / large xxhdpi 128MB
 xlarge mdpi 32MB
 xlarge tvdpi / hdpi 64MB
 xlarge xhdpi 128MB
 xlarge 400dpi 192MB
 xlarge xxhdpi 256MB

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值