码迷,mamicode.com
首页 > 其他好文 > 详细

BitmapUtils加载机制

时间:2016-04-21 11:40:27      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:

BitmapUtils加载bitmap流程

     BitmapUtils主要解决Android加载图片出现的OOM现象,采取了多级缓存机制(内存缓存和磁盘缓存)保存图片避免OOM现象,采取异步加载bitmap,在listView快速滑动时停止加载。

1.   BitmapUtils接口支持AssetsUrlPath的图片路径。

     BitmapGlobalConfig主要配置磁盘缓存路径,程序内存缓存大小。(不设置有默认值),直接在bitmapUtils初始化时设置。

     BitmapDisplayConfig主要配置异步加载未完成时临时显示的图片,加载失败显示的图片,加载过程中的动画,图片是否翻转,是否显示原图以及显示图片的最大Size等。

2.   为何出现OOMbitmaputils如何规避OOM

     出现OOM的原因主要有:加载对象过大,加载资源过多,内存没来得及释放,导致系统内存不足。

     BitmapUtils主要采取两种方式加载图片避免OOM。

 (1)内存缓存(LruCache)。主要采取LinkedHashMap< MemoryCacheKey, Bitmap >存储bitmap到缓存中,默认系统缓存为4M,当内存超出4M,移除上一元素的缓存。

 (2)采取decodeFileDescriptor与BitmapFactory.Options结合动态分配bitmap内存。

BitmapFactory.Options options = new BitmapFactory.Options();
options.inTempStorage = new byte[12 * 1024];
options.inSampleSize = 1;
bitmap = BitmapFactory.decodeFileDescriptor(ins.getFD(), null, options);

      用BitmapFactory解码一张图片时,会遇到OOM现象。这往往是由于图片过大造成的。要想正常使用,则需要分配更少的内存空间来存储。以下两个参数只需要设置一个即可实现动态分配bitmap内存。

     inTempStorage设置图片资源临时空间。

     inSampleSize设置恰当的inSampleSize可以使BitmapFactory分配更少的空间以消除OOM。

3.  BitmapUtils加载Bitmap策略

(1)首先加载内存缓存bitmap。

(2)在内存缓存获取不到的情况下,加载文件缓存的文件输入流,把文件输入流转化为bitmap,同时存储到内存缓存中,并且回收当前的bitmap。

(3)直接加载路径下的资源(Assets、Path、URL)处理都一样,都是获取文件输入流。通过BitmapFactory.decodeFileDescriptor,把文件输入流转化为bitmap,同时保存文件输入map。技术分享

 

BitmapUtils加载机制

标签:

原文地址:http://www.cnblogs.com/xiakexinghouzi/p/5416086.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!