web-dev-qa-db-ja.com

Glideで画像をキャッシュする方法

グライドを使用すると、一部の画像が読み込まれません。すべての画像が読み込まれるアプリをいつ使用するまで、どのようにキャッシュまたはどこにでも保存できます。私の問題の写真の例:

screenshot

私のコード:

.Java

             home_ib7_monster_truck = 
            (ImageButton)findViewById(R.id.home_ib7_monster_truck);
             Glide.with(Home.this)
            .load(R.drawable.moviep_monster_truck)
            .centerCrop()
            .fitCenter()
            .diskCacheStrategy(DiskCacheStrategy.ALL)
            .into(home_ib7_monster_truck);

.xml

<ImageButton
            Android:id="@+id/home_ib7_monster_truck"
            Android:layout_width="98dp"
            Android:layout_height="155dp"
            Android:layout_alignStart="@+id/home_ib4_keplers_dream"
            Android:layout_below="@+id/home_ib4_keplers_dream"
            Android:layout_marginTop="14dp"
            Android:background="@Android:color/transparent"
            Android:scaleType="fitCenter" />

私はそれが使いやすいと思ったのでグライドを使用し、ドローアブルから画像をロードできます。そして、主な問題は、これがランダムに行われることです。つまり、すべての画像が見えなくなると、もう一度すべての画像が見えるようになり、その理由がわかりません。私は980x1550サイズの画像を使用しています。これは、画像をピクセルで一杯にしたくないためです。xmlでsrcなどの別の方法を使用すると、メモリエラーが発生します。だから誰もが解決策を知っています、どうすれば画像をキャッシュできますか?

EDIT:これら(.diskCacheStrategy(DiskCacheStrategy.RESULT; diskCacheStrategy(DiskCacheStrategy.Source)を使用すると、同じ問題が発生します。LogCatからこれを取得します。ThrowingOutOfMemoryError "Failed to allocate a 1519012 byte allocation with 230112 freeバイトとOOMまでの224KB」、そしてキャッシュする必要があるときの方法がわかりません。

5
Katona Tamas

公式ドキュメントに従って、以下の説明をお読みください。 https://futurestud.io/tutorials/glide-caching-basics

enter image description here

enter image description here

6
Saurabh Mistry

ここでは、キャッシュからイメージをロードして新しいデータをダウンロードする一般的なシナリオを示しますonly新しいイメージが存在する場合、イメージが更新されているかどうかを知る方法が必要です(変数など)。画像が最後に更新された時間を含むimageTimeStampと呼ばれます。

            Glide.with(context).load(url).apply(new RequestOptions()
                .placeholder(R.drawable.defultIcon)
                .signature(new ObjectKey(image.getPPTimeStamp()))) // here you add some value , if the next time you add the same value then it will load from cache otherwise if you put new value you will download , then save in cache
                .into(icon);
3
Nour Ahmed

Glideはデフォルトですべての画像リソースをメモリキャッシュに入れます。したがって、特定の呼び出し.skipMemoryCache( false )は必要ありません。

ヒント:事実に注意してください。同じリクエストに対して.skipMemoryCache( true )を使用せずに、メソッドを使用して最初のリクエストを行うと、 、リソースはメモリにキャッシュされます。キャッシング動作を調整する場合は、同じリソースへのすべての呼び出しで一貫していることを確認してください。

参照: https://futurestud.io/tutorials/glide-caching-basics

0
Abhishek kumar