DBからのイメージのリストをロードする際に問題が発生しました(OOM)。私のデータベースでは、画像はBLOBとして保存されます。これらのイメージは、RecyclerViewを使用してフラグメントにフェッチされ、表示されます。 画像はグライドを使用してロードされ、私は1つの列(画像添付)で3枚の画像を表示するGridLayoutManagerを使用している:Androidローディングバイト配列イメージのリスト
Glide
.with(context)
.load(image[])
.asBitmap()
.override(dimensionPixelSize)
.dontAnimate()
.centerCrop()
.placeholder(R.drawable.image)
.into(imageView);
画像がDBからフェッチされる場合、私はシングルトンに格納してい等
class ImageData {
private List<ImageModel> images;
private static final ImageDate instance = new ImageData();
private ImageData() {
}
public static ImageData getInstance() {
return instance;
}
public void setImages(List<ImageModel> images) {
this.images = images;
}
public List<ImageModel> getImages() {
return images;
}
}
ImageModelクラスアダプタを作成する際の画像のリストを使用してクラス、その後、実際の画像と長いタイムスタンプフィールドに[]バイト有します。 また、フルスクリーンイメージonClickを表示する可能性があります。この場合、viewPagerでDialogFragmentを作成しており、ViewPagerAdapterはシングルトンクラスから同じリストを使用しています。 実際の問題は、ときどきOOMを取得できることです。これは15分後に起こります。アプリを使用したり、アプリを開いたり開いたりして何回か使用できます。 Glideにメモリとディスクキャッシュ戦略があることはわかっています。たとえば、.skipMemoryCache(true)またはdiskCacheStrategy(DiskCacheStrategy.SOURCE)を試しましたが、成功しませんでした。 いくつか提案してもらえますか?必要があれば、コードをいくつか追加できますが、基本的にRecyclerViewでViewHolderパターンを使用しています。このイメージを読み込むためのGlideコードはViewHolderクラスの内側にあります。
'画像をDBから取り込んだときに、私はシングルトンクラスに保存しています.'これを行うべきではなく、必要に応じてDBから直接画像を読み込みます。 –
さて、このようにして、シングルトンクラス – slena17
の「実際の画像のためのバイト[]」を削除します。正確には? Jpg? PNG?あなたはBLOBとして正確に何を保存しますか? – greenapps