2

我在我的应用程序中使用 Picasso 来下载和缓存图像。
它的工作很好,但有一个问题:应用程序有很多图像,并且在短时间内应用程序缓存增加超过 10 MB!

经过长时间的搜索,我找到了在毕加索中限制缓存的解决方案,但不起作用:

 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 中使用此方法。
我的工作出了什么问题?还是有其他方法可以实现这一目标?
{我希望清楚地解释我的问题:/}

4

3 回答 3

0

也许您定义的整数 PICASSO_DISK_CACHE_SIZE 与 Picasso 使用的值相同,具体取决于您的设备。尝试减小该值。但是减少内存缓存大小可能会导致每个 imageView 上的 flash。我建议您使用 Glide 而不是 Picasso。Picasso 使用 ARGB_8888,而 glide 使用 RGB_565,您可以在下面的文档中看到内存占用。

看看这个文档

于 2015-09-23T06:50:51.130 回答
0

嗨,最近我在应用程序中加载这么多图像时遇到了这个问题。尝试使用通用图像加载器库
https://github.com/nostra13/Android-Universal-Image-Loader

清除缓存:https ://github.com/nostra13/Android-Universal-Image-Loader/issues/138

于 2015-09-23T06:26:24.837 回答
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);
于 2015-09-23T06:31:33.697 回答