Picasso入门教程(十一)Influencing Image Cache(影响图片缓存)
来源:互联网 发布:雅俗共赏歌词知乎分析 编辑:程序博客网 时间:2024/05/31 19:07
我们之前已经讲过,Picasso使用硬盘和内存中缓存的图片,这样加载起来会更快一些。在这篇博客中,我们深入了解一下Picasso的缓存策略。
标准行为
下面是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总是先从memery cache中加载图片。如果图片最近没有请求过,并且图片并没有在memory cache中缓存,Picasso再检验一下disk cache。如果图片不在disk cache中,Picasso再进行网络请求。
此外,如果请求的图片在两种内存中(直到他们不得不按顺序删除来释放空间)。总之,Picasso检验顺序是memory->disk->network.
如果你不需要Picasso这么做,你可以自定义内存缓存机制。让我们来看一下MemoryPolicy。
Memory Policy
再说一次,Picasso首先尝试首先在内存中加载图片。如果你不想Picasso这么做,你可以调用memoryPolicy(MemoryPolicy policy, MemoryPolicy... additional)
。MemoryPolicy有两种枚举类型的参数:NO_CACHE
和NO_STORE
。
如果你不想从内存中加载图片,你可以使用NO_CACHE
。下面是例子:
Picasso .with(context) .load(UsageExampleListViewAdapter.eatFoodyImages[1]) .memoryPolicy(MemoryPolicy.NO_CACHE) .into(imageViewFromDisk);
如果你知道这张图片只需要使用一次,你可以使用.memoryPolicy(MemoryPolicy.NO_STORE)
。Picasso将不会将图片加载到memory cache。当然,你也可以两种选择一块使用:
Picasso .with(context) .load(UsageExampleListViewAdapter.eatFoodyImages[1]) .memoryPolicy(MemoryPolicy.NO_CACHE, MemoryPolicy.NO_STORE) .into(imageViewFromDisk);Beware, calling .memoryPolicy(Memory
需要当心的是:.memoryPolicy(MemoryPolicy.NO_CACHE)
这个方法不会阻止Picasso将图片加载到disk cache。为了跳过这两种缓存,你可以看一下NetworkPolicy
.
Network Policy
MemoryPolicy控制memory cache 而NetworkPolicy控制disk cache。两个枚举类型的参数和之前是一样的,如果你不想缓存到disk cache,你可以调用:.networkPolicy(NetworkPolicy policy, NetworkPolicy... additional)
参数传NetworkPolicy.NO_CACHE
。
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将会从任意一种cache中加载图片。但是这时不会进行网络请求,即使这个时候有网络连接而且并没有在内存中找到缓存图片。
总结
在大多数情况下,Picasso的默认行为使用起来都特别合适。然而,如果你需要定制请求,Picasso也可以满足你。在下一篇博客中,我们可以进一步了解Picasso。
- Picasso入门教程(十一)Influencing Image Cache(影响图片缓存)
- 【Android】Picasso加载本地图片如何清理缓存cache?
- picasso图片缓存框架
- Picasso入门教程(十二)Cache Indicators,Logging & Stats
- React Native Image Cache(图片缓存库模块)详解(一)
- Universal-Image-Loader,android-Volley,Picasso、Fresco和Glide图片缓存库的联系与区别
- Universal-Image-Loader,android-Volley,Picasso、Fresco和Glide图片缓存库的联系与区别
- Universal-Image-Loader,android-Volley,Picasso、Fresco和Glide图片缓存库的联系与区别
- Picasso-Android图片缓存库
- picasso 图片缓存库介绍
- Android Picasso 图片缓存库
- Picasso之图片缓存机制
- Android中picasso图片缓存
- Picasso 加载图片 缓存小结
- Android Picasso不缓存图片
- Picasso入门教程(十)图片旋转和变换
- Universal-Image-Loader(android图片缓存)
- Universal-Image-Loader(android图片缓存)
- phpcms v9最实用的23个调用代码
- XML简介
- OpenCV 将视频截成等长的小片段
- 学习android笔记(5) 动态建立TableLayout 表格布局
- Linq的延迟加载
- Picasso入门教程(十一)Influencing Image Cache(影响图片缓存)
- 我的读书方法
- 数组剔除元素后的乘积
- poj 3579 二分
- pip安装失败
- Lightoj 1007
- NAS 厂商的简单总结
- GPS定位基本原理浅析
- 接口与类的相似及区别