简单分析下glide的实现机制

glide是目前非常流行和受欢迎的图片框架,这个框架从设计架构上看非常弹性,例如对文件格式的支持就是采用了注册的方式,

        dataLoadProviderRegistry = new DataLoadProviderRegistry();
        StreamBitmapDataLoadProvider streamBitmapLoadProvider =
                new StreamBitmapDataLoadProvider(bitmapPool, decodeFormat);
        dataLoadProviderRegistry.register(InputStream.class, Bitmap.class, streamBitmapLoadProvider);
        FileDescriptorBitmapDataLoadProvider fileDescriptorLoadProvider =
                new FileDescriptorBitmapDataLoadProvider(bitmapPool, decodeFormat);
        dataLoadProviderRegistry.register(ParcelFileDescriptor.class, Bitmap.class, fileDescriptorLoadProvider);

对文件来源的形式也是采用的是注册形式:

    register(File.class, ParcelFileDescriptor.class, new FileDescriptorFileLoader.Factory());
    register(File.class, InputStream.class, new StreamFileLoader.Factory());    

  这就是一种插拔式的设计,实际项目使用中可以根据具体的需求来做裁剪或添加.
另一方面glide的在缓存设计上也很有独到的地方,其缓存大致可以分为:
(1) 基于LRU的LruResourceCache
(2) 基于使用活跃频率的存储:

         Map<Key, WeakReference<EngineResource<?>>> activeResources

(3) 基于LRU的DiskLruCacheWrapper
(4) 最后才是发起网络请求从服务器获取文件;

在解析bitmap的过过程中还有个LruBitmapPool,通过这个bitmap池来存储不需要的bitmap,当需要解析新的bitmap时,直接从这个pool中来查找size符合需要的bitmap,复用bitmap,避免重复新建bitmap带来的性能损耗,bitmappool的类图如下:
这里写图片描述

简单记录下部分原理,具体详情待下一步来完善.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值