美文网首页Android开发
【译】影响图片缓存行为

【译】影响图片缓存行为

作者: 小鄧子 | 来源:发表于2016-06-20 02:34 被阅读616次

标准行为

Picasso实例中有如下默认设置:

This instance is automatically initialized with defaults that are suitable to most implementations.

  • LRU memory cache of 15% the available application RAM
  • Disk cache of 2% storage space up to 50MB but no less than 5MB. (Note: this is only available on API > 14+ or if you are using a standalone library that provides a disk cache on all API levels like OkHttp)
  • Three download threads for disk and network access.

缓存的大小可以随意更改,但显然超出了这篇文章的范围。回到主题上来:Picasso首先会尝试去内存中加载图像,如果最近没有加载过这张图片,或者这张图片并不存在于内存中,Picasso会去磁盘中检查它的存在。如果磁盘中也不存在,则开启网络请求。

此外,所有请求成功的图片都会保存到内存和磁盘中(除非为了释放内存而被删除)。总而言之就是,Picasso的加载路径为内存->磁盘-> 网络。

可以通过自定义内存和网络加载策略改变Picasso的行为。接下来一起看下MemoryPolicy

内存策略

再说一遍,Picasso试图先从内存中加载图片。如果你想让Picasso跳过内存查找,可以在Picasso请求上调用memoryPolicy(MemoryPolicy policy, MemoryPolicy... additional)MemoryPolicy是只有两个NO_CACHENO_STORE值的简单枚举类。

举例来说,可以使用NO_CACHE限制Picasso从内存中加载图片,示例如下:

Picasso  
    .with(context)
    .load(UsageExampleListViewAdapter.eatFoodyImages[1])
    .memoryPolicy(MemoryPolicy.NO_CACHE)
    .into(imageViewFromDisk);

如果你想知道如何使用NO_STORE这个枚举:比如说,当前请求的图片,只会被使用一次,那么就应该调用.memoryPolicy(MemoryPolicy.NO_STORE)。因此,Picasso不会把这张图片放入到内存缓存中。

当然,你可以在一个请求上联合使用这些特性:

Picasso  
    .with(context)
    .load(UsageExampleListViewAdapter.eatFoodyImages[1])
    .memoryPolicy(MemoryPolicy.NO_CACHE, MemoryPolicy.NO_STORE)
    .into(imageViewFromDisk);

需要注意的是,调用.memoryPolicy(MemoryPolicy.NO_CACHE)不会阻止Picasso从磁盘中查询图片!如果想跳过这两个缓存查询,你需要看一下NetworkPolicy

网络策略

NetworkPolicy调节磁盘缓存的方式与MemoryPolicy调节内存缓存的方式一样。甚至枚举的命名都是一样的。

如果你想跳过磁盘缓存,可以使用NetworkPolicy.NO_CACHE作为参数,调用.networkPolicy(NetworkPolicy policy, NetworkPolicy... additional)

Picasso  
    .with(context)
    .load(UsageExampleListViewAdapter.eatFoodyImages[2])
    .networkPolicy(NetworkPolicy.NO_CACHE)
    .into(imageViewFromNetwork);

当前,你可以把之前提到的任何可能的配置进行合并:

Picasso  
    .with(context)
    .load(UsageExampleListViewAdapter.eatFoodyImages[2])
    .memoryPolicy(MemoryPolicy.NO_CACHE, MemoryPolicy.NO_STORE)
    .networkPolicy(NetworkPolicy.NO_CACHE)
    .into(imageViewFromNetwork); 

最后,NetworkPolicy还有第三个可选参数:OFFLINE。如果选择这种模式,Picasso将会从内存或者磁盘中查询图片,如果这两种缓存中都没有查询到结果,即便网络连接可用,Picasso依然不会开启网络请求去加载图片。

相关文章

  • 【译】影响图片缓存行为

    原文链接: Influencing Image Caching原文作者: Future Studio译文出自: ...

  • JS 浏览器缓存

    缓存优点 根据缓存位置区分的四种缓存 缓存过程分析 缓存策略 缓存机制 实际应用场景 用户行为对浏览器缓存的影响 ...

  • 清单主题营:所谓情商高就是会说话

    佐佐木圭一 著 程亮 译 图片发自简书App 1.学会说话 人的行为意愿会受到措辞的影响,掌握并运用措辞技巧可以...

  • 架构&框架

    图片缓存 怎样设计一个图片缓存框架 图片管理者模块:内存缓存模块、磁盘缓存模块、网络图片下载模块 图片处理:图片解...

  • 区分SDWebImage的三种缓存

    SDWebImage的三种缓存分为:内存图片缓存、磁盘图片缓存、内存操作缓存步骤如下1、先查看内存图片缓存,内存图...

  • 内存优化

    如何获取Android系统中申请对象的信息 [译]Android内存泄漏的八种可能 Android中图片的三级缓存

  • 多线程03

    SDWebImage框架详解 下载图片并显示: 下载图片/显示图片/内存缓存/磁盘缓存 下载图片\内存缓存\磁盘缓...

  • Android常用开源工具库

    一、图片缓存 Android-Universal-Image-Loader图片缓存,目前使用最广泛的图片缓存,支持...

  • UIImage加载图片的方式以及Images.xcassets对

    UIImage加载图片的方式以及Images.xcassets对于加载方法的影响? 图片缓存 根据是否将创建好的对...

  • iOS编程之缓存清除以及文件操作等

    1,SDWebImage图片缓存 这里简单讲解以下SDWebImage图片缓存大小计算以及清理缓存的方法 获取图片...

网友评论

    本文标题:【译】影响图片缓存行为

    本文链接:https://www.haomeiwen.com/subject/uwlmdttx.html