图片加载6:图片优化之inBitmap

inBitmap是在BitmapFactory中的内部类Options的一个变量,简单而言,使用该变量可以复用旧的Bitmap的内存而不用重新分配以及销毁旧Bitmap,进而改善运行效率。

bitmap是很消耗内存的,当bitmap不用时我们需要回收

bitmap.recycle();

以上代码可以回收bitmap在堆中的内存,回收之后,bitmap不得再重新使用。但是,当我们使用listview加载多张图片时,我们都知道,listview的Item有复用的特性,必然经常复用bitmap缓存,这时inBitmap的作用尤为重要。

inBitmap变量是在Android 3.0+版本加入到系统源码当中,也就意味着inBitmap参数只有在Android 3.0+版本及以上能够正常使用,当你的app版本低于3.0的时候,只能使用bitmap.recycle()进行Bitmap的回收操作;在Android 3.0+以上根据系统版本的不同,使用inBitmap的规则也不相同,具体区分如下:

  • 4.4之前的版本inBitmap只能够重用相同大小的Bitmap内存区域。简单而言,被重用的Bitmap需要与新的Bitmap规格完全一致,否则不能重用。

  • 4.4之后的版本系统不再限制旧Bitmap与新Bitmap的大小,只要保证旧Bitmap的大小是大于等于新Bitmap大小即可。

  • 除上述规则之外,旧Bitmap必须是mutable的,这点也很好理解,如果一个Bitmap不支持修改,那么其内存自然也重用不了,代码如下:

    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inMutable = true;//如果为true, 那么该bitmap缓存区可以被修改,否则不可被修改
    

我们看一下效果图:

使用inBitmap之前:

图片.png

使用inBitmap之后:

QQ图片20190520141728.png

接下来的篇章中我们介绍下Glide的使用和原理。

Glide内部也使用了inBitmap作为缓存复用的一种方式。

发布了122 篇原创文章 · 获赞 30 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/qijingwang/article/details/101225031