gpt4 book ai didi

android - 在 Picasso 中应用变换时,原始图像的缓存未被重用

转载 作者:行者123 更新时间:2023-11-29 18:30:45 27 4
gpt4 key购买 nike

我正在尝试使用 Picasso 在原始位图和转换后的位图之间切换。问题是第一次加载原始图像时它似乎被缓存了,但是当我加载转换后的图像时它似乎再次重新加载图像并且不使用缓存。相同的 url 用于获取图像。它只发生在原始和转换的第一次,然后使用缓存。

我期望 Picasso 应该自动重用已兑现的原始图像以应用转换并立即重新加载它。也许我错过了什么。

这里是图片加载的代码。

 private fun loadOriginalImage(i: Product, productImage: ImageView) {
Picasso.get().load(getProductUrl(i.id)).placeholder(R.color.light_grey)
.error(R.color.light_grey).fit().centerCrop().into(productImage)
}


private fun loadGreyedImage(i: Product, productImage: ImageView) {
Picasso.get().load(getProductUrl(i.id)).placeholder(R.color.light_grey)
.error(R.color.light_grey).fit().centerCrop().transform(GrayScaleTransform()).into(productImage)
}

Picasso 版本 implementation 'com.squareup.picasso:picasso:2.71828'

最佳答案

是内存缓存还是磁盘缓存?您如何验证缓存确实未被使用?

这里有一些选项(考虑到 MemoryPolicy 和 NetworkPolicy 没有被修改,你也没有替换标准的 okHTTP3 客户端):

  • 图像在这两次调用之间被推出内存缓存(缓存太小,无效调用等)
  • 磁盘缓存由 HTTP 客户端控制,与 Picasso 无关,因此不正确设置 http header 可能会导致这种情况(但在那种情况下,原始图像应该已经从内存缓存中删除)

打开指示器和日志记录可以提供有关正在发生的事情的更多信息:

Picasso  
.with(context)
.setIndicatorsEnabled(true)
.setLoggingEnabled(true)

此外,如果有可能只执行这两个调用,您可以执行它们并从内存缓存中获取快照数据以检查其大小、命中和未命中等:

StatsSnapshot stats = Picasso.with(context).getSnapshot();  
Log.d("stats", stats.toString());

这可能会提供更多调试信息以供考虑,例如是否恰好有两次对缓存的调用,是否有未命中等

编辑:key() 函数是否在您的转换中正确实现?

关于android - 在 Picasso 中应用变换时,原始图像的缓存未被重用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56429116/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com