Universal-image-loader数据接口和缓存实现策略

数据缓存

图片数据的起始位置是远端的 数据服务器 ,直到被加载到内存中才可以展示到客户端界面的View上。为了加快数据处理速度,需要在每一步对处理过的数据进行保存,再次需要时直接使用节省时间,是为缓存。

数据缓存.png

缓存策略

数据缓存需要提供合适的缓存策略,原因有二:

  1. 空间是有限的:APP分配到的内存大小和在文件系统中占据的空间大小依赖于操作系统的策略,都是有限的;
  2. 空间不足时,需要对现有的数据进行删除,数据被再次用到的几率和频次是不同的;
缓存分类

依据上面的图,按照缓存的位置不同可以分为下面几个:

  1. 网络缓存:也可以称为云缓存,一般需要从云服务运营商处购买服务,例如:CDN;
  2. 磁盘缓存:从云端下载文件到本地文件系统,保存在文件系统中;
  3. 内存缓存:数据在使用前需要加载到内存中,相对文件系统内存空间更小;

图中还有一个部分 客户端网络框架,通常网络框架也会提供文件系统缓存和内存缓存,但是他们本质上是在同一个APP运行实例中,内存和文件系统空间是共享的,没有必要同时使用,这里要注意做好处理。

缓存工具

下面每个部分都有一些工具,例如 BaseImageDownloaderBaseImageDecoder 在框架中起到重要的连接作用,同时也可以作为独立的工具类提供图片数据下载和加载服务。

文件缓存

加载到文件系统

image.png

  • BaseImageDownloader

    Universal-image-loader提供 BaseImageDownloader 支持把多种数据来源的图片资源转存到缓存目录中:

    private boolean downloadImage() throws IOException {
       // 获取数据流
       InputStream is = getDownloader().getStream(uri, options.getExtraForDownloader());
       if (is == null) {
          L.e(ERROR_NO_IMAGE_STREAM, memoryCacheKey);
          return false;
       } else {
          try {
             // 保存到缓存目录
             return configuration.diskCache.save(uri, is, this);
          } finally {
             IoUtils.closeSilently(is)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值