图文课程 职群旗下

  1. 首页
  2. 所有分类
  3. 前端
  4. android 图片性能优化

android 图片性能优化

    本章讲述在android开发中,图片处理方面的优化。包括知识点为大图加载,图片压缩,图片缓存处理及开源图片处理框架Universal-Image-Loader。

1.图片引发的内存不足

    当在android应用中加载一张高分辨率的图片时,十分容易出现Out of memory(OOM),这是由于内存溢出造成的,每个应用所使用的堆内存大小一般是固定的,有的是16M,有的可能会大些。那为什么这么大内存加载一张图片会溢出呢?原因就是android在加载图片的时候是使用位图来放到内存中的,那位图在内存中的占用空间计算就是分辨率*每个像素占用的内存。

  • ALPHA_8:每个像素占用1byte内存
  • ARGB_4444:每个像素占用2byte内存
  • ARGB_8888:每个像素占用4byte内存
  • RGB_565:每个像素占用2byte内存

    如果一个图片的分辨率是1024*768,采用ARGB_8888,那么占用的空间就是 1024*768*4=3MB,这张图片需要占用3M的内存空间,对于这样的图片,如果只加载一样的话,内存还能应付的过来,如果分辨率更高。例如:3648*2736的一样照片,内存占用为3648*2736*4=33MB,这一张图片就是占用33MB的空间,肯定会导致内存溢出。 那应该如何处理呢?

  • 降低图片加载到内存时的图片大小(分辨率)。
  • 采用更节省内存的编码,例如ARGB_4444。
  • 如果是加载大量图片的话,还可以采用缓存。

2.BitmapFactory.options类介绍

    BitmapFactory.Options为BitmapFactory的一个内部类,它主要用于设定与存储BitmapFactory加载图片的一些信息。下面是Options中需要用到的属性:

  • options.inJustDecodeBounds:如果设置为true,将不把图片的像素数组加载到内存中,仅加载一些额外的数据(如图片大小)到Options中。
  • options.outHeight:图片的高度。
  • options.outWidth:图片的宽度。
  • options.inSampleSize:如果设置,图片将依据此采样率进行加载,不能设置为小于1的数。例如设置为4,分辨率宽和高将为原来的1/4,这个时候整体所占内存将是原来的1/16。
  • options.inDither:设置为false不进行图片抖动处理
  • options.inPreferredConfig:设置为null 让解码器以最佳方式解码

    对于大图片处理时,一般通过压缩方式显示在移动设备上。如指定图片按照固定大小展示处理代码如下:



//
大图片压缩为宽,高200px的图像展示
BitmapFactory.Options options = new Options();

options.inJustDecodeBounds = true;

BitmapFactory.decodeResource(rs, R.drawable.a2,options);

options.inPreferredConfig = Bitmap.Config.ARGB_4444;

options.inSampleSize = calculateInSampleSize(options, 200, 200);

//获取压缩倍数

options.inJustDecodeBounds = false;

Bitmap bitmap = BitmapFactory.decodeResource(rs,R.drawable.a2,options);

iv.setImageBitmap(bitmap);

//图片绑定

    如大图展示比例为1,压缩参数设置为2,4后的处理效果如下图所示:

猜你喜欢
android Volley+Gson的使用 android 6.0获取 WRITE_SETTINGS 权限
android studio获取SHA1 jetbrains系列IDE VMoptions 优化指南
手机访问网页自适应网页及图片高度 优化eclipse
Android系统移植与驱动开发——第五章--搭建开发板的测试环境 Android系统移植与驱动开发——第六章——使用实例来理解Linux驱动开发及心得
Android系统移植与驱动开发——第七章——LED驱动 nginx+php与apache+php性能对比