【发布时间】:2015-10-12 11:41:17
【问题描述】:
我在我的 Android Udacity 项目中使用 Picasso 处理图像加载和缓存,我注意到缓存没有像我预期的那样工作:
如您在左侧片段中所见,图像已在较早的线程中加载。现在,使用相同的 URL 链接,我要求 Picasso 将该图像放在右侧的片段中。
这是在左侧片段上生成网格视图的代码(并且首先出现):
String load = String.format(sImgUrl, sImgSize, movie.poster_path);
Picasso.with(mContext.getApplicationContext())
.load(load)
.placeholder(R.drawable.abc_btn_rating_star_on_mtrl_alpha)
.error(R.drawable.abc_btn_rating_star_off_mtrl_alpha)
.resize(550, 775)
.into(viewHolder.imageView);
然后这是在正确片段中运行的代码:
Picasso.with(getActivity().getApplicationContext())
.load(String.format(sImgUrl, sImgSize, mMovieObj.poster_path))
.error(R.drawable.blank)
.fit()// .resize(366, 516)
.into(mMovieThumb, new com.squareup.picasso.Callback() {
@Override
public void onSuccess() {
Utils.log(sw.toString());
Utils.hideViewSafe(mMovieThumbProgress);
}
@Override
public void onError() {
Utils.log(sw.toString());
Utils.hideViewSafe(mMovieThumbProgress);
}
});
我在每个和加载文本中都使用相同的应用程序上下文:
String.format(sImgUrl, sImgSize, mMovieObj.poster_path))
和
getActivity().getApplicationContext()
所以,我认为 Picasso 应该检测到完全相同的 URL 加载链接何时出现在相同的上下文中,并且在很短的时间内彼此出现,然后 Picasso 会将完全相同的图像加载回应用程序中。
如果这不是毕加索缓存的工作方式,那么它是如何工作的?
【问题讨论】:
-
不确定它是如何工作的,但我猜:尺寸很重要。毕加索创建同一张图片的不同版本可以解释这种行为。
-
嗯,我原以为毕加索会下载原始图像,然后在随后的调用中调整大小。如果这实际上是毕加索正在做的事情(只缓存确切的大小),有没有办法禁用它并让毕加索缓存原始图像?
标签: android caching android-fragments android-activity picasso