グライドを使用すると、一部の画像が読み込まれません。すべての画像が読み込まれるアプリをいつ使用するまで、どのようにキャッシュまたはどこにでも保存できます。私の問題の写真の例:
私のコード:
.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」、そしてキャッシュする必要があるときの方法がわかりません。
ここでは、キャッシュからイメージをロードして新しいデータをダウンロードする一般的なシナリオを示します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);
Glideはデフォルトですべての画像リソースをメモリキャッシュに入れます。したがって、特定の呼び出し.skipMemoryCache( false )
は必要ありません。
ヒント:事実に注意してください。同じリクエストに対して.skipMemoryCache( true )
を使用せずに、メソッドを使用して最初のリクエストを行うと、 、リソースはメモリにキャッシュされます。キャッシング動作を調整する場合は、同じリソースへのすべての呼び出しで一貫していることを確認してください。