我有一个可能的问题(OOM)加载来自DB的图像列表。在我的数据库中,图像存储为BLOB。使用RecyclerView获取这些图像并在Fragment中显示。 使用Glide加载图像,我使用GridLayoutManager在一行中显示3个图像(附图):
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类具有实际图像和长时间戳字段的byte []。 此外,有可能在onClick上显示全屏图像 - 在这种情况下,我正在使用viewPager创建DialogFragment,而ViewPagerAdapter正在使用来自singleton类的相同列表。 实际问题是有时我可以得到OOM。这发生在15/20分钟后。使用该应用程序和几次关闭和打开应用程序。 我知道Glide有内存和磁盘缓存策略,例如我尝试使用.skipMemoryCache(true)或diskCacheStrategy(DiskCacheStrategy.SOURCE),但没有成功。 你能帮我一些建议吗?如果你需要我可以添加一些代码,但基本上我使用的是带有RecyclerView的ViewHolder模式,这个用于加载图像的Glide代码在ViewHolder类中。
答案 0 :(得分:0)
字节数组受设备上可用内存的限制。如果您正在创建字节数组而不是销毁它,则内存不足。我希望这会有所帮助。