毕加索 - 将缓存大小限制为5 MB

时间:2015-09-23 06:15:46

标签: android caching picasso android-lru-cache

我在我的应用程序中使用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中使用此方法 我的工作有什么问题?或者还有其他方法可以实现这一目标吗? {我希望明确解释我的问题:/}

3 个答案:

答案 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