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

こんにちは最近、アプリケーションに非常に多くの画像をロードしているときにこの問題に直面しました.Universal Image Loaderライブラリを試して
ください 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

定義した整数の PICASSO_DISK_CACHE_SIZE は、デバイスによっては Picasso 自体が使用する値と同じ値になる場合があります。値を減らしてみてください。ただし、メモリ キャッシュ サイズを小さくすると、各 imageView でフラッシュが発生する可能性があります。Picasso の代わりに Glide を使用することをお勧めします。Picasso は ARGB_8888 を使用しますが、glide は RGB_565 を使用します。以下のドキュメントでメモリ フットプリントを確認できます。

このドキュメントを見てください。

于 2015-09-23T06:50:51.130 に答える
0

Picasso はすでに画像をキャッシュしているため、この場合は LruCache を使用しないでください。あなたのケースで私が特定した問題は、あなたの画像のいくつかが非常に大きいかもしれないということです. この場合、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 に答える