Android加载字节数组图像列表

时间:2016-12-20 09:15:36

标签: java android arrays image android-glide

我有一个可能的问题(OOM)加载来自DB的图像列表。在我的数据库中,图像存储为BLOB。使用RecyclerView获取这些图像并在Fragment中显示。 使用Glide加载图像,我使用GridLayoutManager在一行中显示3个图像(附图):

Glide
.with(context)
.load(image[])
.asBitmap()
.override(dimensionPixelSize)
.dontAnimate()
.centerCrop()
.placeholder(R.drawable.image)
.into(imageView);

GridLayout

从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类中。

1 个答案:

答案 0 :(得分:0)

字节数组受设备上可用内存的限制。如果您正在创建字节数组而不是销毁它,则内存不足。我希望这会有所帮助。