毕加索第一次加载不缓存,但第二次就可以了
picasso doesn't cache for the first load but it's ok for the second time
我实现了一个例程,将 json 中的数据保存到数据库中,之后如果用户离线,他可以看到所有数据。但毕加索不会在第一个 运行 之后加载图像。但是当我 运行 在在线模式下应用程序两次时,毕加索可以在离线模式下从缓存中加载图像。
(它应该在第一个 运行 上缓存图像,但它不起作用)
感谢任何建议
Picasso 没有磁盘缓存。它委托给您用于该功能的任何 HTTP 客户端(依赖于 HTTP 缓存语义进行缓存控制)。因此,您寻求的行为是免费的...
主要原因可能是其他图片因尺寸过大而将较旧的图片从缓存中逐出。您可以像这样加载较小的版本或增加内存缓存的大小
Picasso p = new Picasso.Builder(context)
.memoryCache(new LruCache(Size))
.build();
如果您不想保存在缓存中,您还可以使用 内存策略.
将其排除
毕加索首先尝试从内存中获取请求的图像。如果您希望 Picasso 跳过此步骤,您可以向 Picasso 请求创建者调用 memoryPolicy(MemoryPolicy policy, MemoryPolicy... additional)
。 MemoryPolicy
是一个简单的枚举,有两个值:NO_CACHE
和 NO_STORE
。像这样
Picasso
.with(context)
.load(UsageExampleListViewAdapter.eatFoodyImages[1])
.memoryPolicy(MemoryPolicy.NO_CACHE, MemoryPolicy.NO_STORE)
.into(imageViewFromDisk);
其他来源:futurestud.io
我实现了一个例程,将 json 中的数据保存到数据库中,之后如果用户离线,他可以看到所有数据。但毕加索不会在第一个 运行 之后加载图像。但是当我 运行 在在线模式下应用程序两次时,毕加索可以在离线模式下从缓存中加载图像。 (它应该在第一个 运行 上缓存图像,但它不起作用)
感谢任何建议
Picasso 没有磁盘缓存。它委托给您用于该功能的任何 HTTP 客户端(依赖于 HTTP 缓存语义进行缓存控制)。因此,您寻求的行为是免费的...
主要原因可能是其他图片因尺寸过大而将较旧的图片从缓存中逐出。您可以像这样加载较小的版本或增加内存缓存的大小
Picasso p = new Picasso.Builder(context)
.memoryCache(new LruCache(Size))
.build();
如果您不想保存在缓存中,您还可以使用 内存策略.
将其排除毕加索首先尝试从内存中获取请求的图像。如果您希望 Picasso 跳过此步骤,您可以向 Picasso 请求创建者调用 memoryPolicy(MemoryPolicy policy, MemoryPolicy... additional)
。 MemoryPolicy
是一个简单的枚举,有两个值:NO_CACHE
和 NO_STORE
。像这样
Picasso
.with(context)
.load(UsageExampleListViewAdapter.eatFoodyImages[1])
.memoryPolicy(MemoryPolicy.NO_CACHE, MemoryPolicy.NO_STORE)
.into(imageViewFromDisk);
其他来源:futurestud.io