默认情况下,毕加索不会调整图像大小。如果您像下一个电话一样进行简单的调用...
Picasso.with(context).load("https://goo.gl/v9EkbF").into(imageView);
...毕加索正在缓存全尺寸图像。从那一刻起,每次你调用同一个URL时,毕加索都会重用那个全尺寸的图像,让GPU调整到视图中。
使用 resize() 方法,您只是缓存已调整大小的图像,如果您使用不同的大小,毕加索将需要再次下载图像。
不要使用 resize() 选项,您将获得更好的带宽使用率,但要小心内存使用。
毕加索中的默认值
毕加索确实有自动内存和磁盘缓存。最近请求的任何图像都将位于内存缓存中。如果没有,毕加索将检查磁盘缓存。如果它在磁盘上不可用,则只有毕加索才会启动网络请求。
所有请求的图像都存储在两个缓存中,直到必须删除它们以释放空间。
2.5.2 中的默认值为:
- LRU 内存缓存为可用应用程序 RAM 的 15%
- 磁盘缓存的2%存储空间高达50MB但不小于5MB。
- 毕加索将使用OkHttp作为Http客户端,如果它被包含在Gradle依赖项中。否则,毕加索将退回到HttpUrlConnection。
您可以像这样增加磁盘缓存(例如100MB):
Picasso picasso = new Picasso
.Builder(this)
.downloader(new OkHttpDownloader(getCacheDir(), 100000000))
.build();
Picasso.setSingletonInstance(picasso);
更改光盘缓存大小不会更改缓存策略。
内存策略
- MemoryPolicy.NO_CACHE:不会从内存中提供图像。这并不能避免从磁盘提供图像。若要避免磁盘,请看低网络策略。
- MemoryPolicy.NO_STORE:图像不会存储在内存中。将此用于仅加载一次的图像。
例
Picasso
.with(context)
.load(https://goo.gl/v9EkbF)
.memoryPolicy(MemoryPolicy.NO_CACHE, MemoryPolicy.NO_STORE)
.into(imageView);
网络策略
- NetworkPolicy.NO_CACHE:不会从磁盘缓存中提供映像。
- NetworkPolicy.OFFLINE:映像将(如果可能)仅从缓存(内存或磁盘)提供,但从不从网络提供。
例:
Picasso
.with(context)
.load(https://goo.gl/v9EkbF)
.networkPolicy(NetworkPolicy.NO_CACHE)
.into(imageView);
内存和缓存注意事项
- 默认情况下,Glide 使用 RGB565 并将调整大小的图像缓存到内存中。
- 默认情况下,毕加索使用RGB888并将全尺寸图像缓存到内存中,并让GPU在绘制时进行实时调整大小。
RGB565 的大小是 RGB888 的一半。使用RGB565和较小图像的结果是毕加索的内存占用量高于Glide的内存占用量(可能是3x / 4x)。
这些只是默认值。Glide可以配置为使用RGB888,毕加索可以配置为使用RGB565。毕加索可以配置为只将调整大小的图像(如Glide)扔到内存中。
在相同的设置下,内存占用量几乎相同。
带宽注意事项
- 滑动为每个大小缓存单独的文件。如果加载同一图像的另一个大小,它将在之前再次下载,调整大小,然后缓存。
- 毕加索总是从缓存中获取全尺寸图像,然后让GPU将大小调整到视图中。
您可以要求 Glide 缓存所有内容,全尺寸图像和调整大小的图像,但默认情况下,Glide 的带宽消耗更高。
注意
毕加索2.6即将到来,我不知道有什么不同/新。
来源