我在我的应用程序中使用Picasso进行下载和缓存图像 它的工作很棒但是有一个问题:应用程序有很多图像,并且在短时间内应用程序缓存增加超过10 MB!
经过长时间的搜索后,我发现这个解决方案是为了限制Picasso中的缓存但不起作用:
private void initPicaso() {
// Create memory cache
Cache memoryCache = new LruCache((int) PICASSO_DISK_CACHE_SIZE);
Picasso mPicasso = new Picasso.Builder(getApplicationContext())
.memoryCache(memoryCache).build();
Picasso.setSingletonInstance(mPicasso);
}
我在我的应用程序类的onCreate中使用此方法 我的工作有什么问题?或者还有其他方法可以实现这一目标吗? {我希望明确解释我的问题:/}
答案 0 :(得分:0)
您好我最近在应用程序中加载了这么多图像时遇到了这个问题。尝试使用Universal Image Loader库 https://github.com/nostra13/Android-Universal-Image-Loader
清除缓存:https://github.com/nostra13/Android-Universal-Image-Loader/issues/138
答案 1 :(得分:0)
我认为你不应该在这种情况下使用LruCache,因为Picasso已经缓存了你的图像。我在你的案例中发现的问题是,你的某些图像可能非常大。在这种情况下,您将使用Picasso的resize方法。并且仅适用于大尺寸图像。要实现这一点,您应该使用Target(),查看以下代码:
if (loadtarget == null){
loadtarget = new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap,
Picasso.LoadedFrom from) {
imageView.setImageBitmap(bitmap);
}
@Override
public void onPrepareLoad(Drawable arg0) {
imageView.setImageResource(R.drawable.place_holder);
}
@Override
public void onBitmapFailed(Drawable arg0) {
Picasso.with(MaxSupportApp.context).load(url)
.resize(300, 300).error(R.drawable.place_holder)
.into(imageView);
}
};
Picasso.with(MaxSupportApp.context).load(url)
.into(loadtarget);
答案 2 :(得分:0)
您定义的整数PICASSO_DISK_CACHE_SIZE可能与Picasso自身使用的值具有相同的值取决于您的设备。请尝试减小该值。但减少内存缓存大小可能会导致每个imageView上的闪存。 我建议你使用Glide而不是Picasso。 Picasso使用ARGB_8888但滑动使用RGB_565,您可以在下面的文档中看到内存占用。
看看这个Document。