我使用幻灯片与RecyclerView,以加载许多图像(约200),有不同的大小和尺寸。
我有三个问题:
以下是有关守则:
public static class MyViewHolder extends RecyclerView.ViewHolder {
@Override
public void onBindViewHolder(final MyViewHolder holder, final int listPosition) {
ImageView imageView = holder.imageView;
Glide.with(imageView.getContext())
.load(tweetMapArray.get(listPosition).get("imageURL").toString())
.diskCacheStrategy(DiskCacheStrategy.ALL)
.crossFade()
.into(imageView);
// imageURL is a valid URL for each item
}
@Override
public void onViewDetachedFromWindow(MyViewHolder holder) {
super.onViewDetachedFromWindow(holder);
Glide.clear(holder.imageView);
}
}请指导我知道我做错了什么。我以前从来没有处理过这么多的图片。
发布于 2016-12-24 13:37:53
我已经找到原因了。问题是,我使用的是放置在NestedScrollView之上的RecyclerView。这可能导致所有图像同时加载。我删除了NestedScrollView,并要求大约200张图片,它现在工作非常顺利。
参考资料:在幻灯片中加载更多图像时内存不足
谢谢你的回信。它们也很有用!
发布于 2016-12-23 22:44:41
没有简单的方法来确定是什么导致了您的OutOfMemoryException,但是有一些方法可以防止它。首先,我会阅读本期,然后查看Android的内存监视器功能,以确定应用程序中的其他地方是否会导致内存泄漏。
然后,我会查看一些图像大小,以及当图像被绑定时,是否需要确定裁剪图像的附件。幻灯片中的.Override(width, height)功能可以帮助您(宽度和高度将随着像素进行调整)。更进一步的.centerCrop()和.fitCenter()也可能有所帮助。
如果这一点都没有帮助,我建议添加一个加载更多的功能。因此,您最初只加载一小部分图像,然后用户可以使用按钮加载更多的图像,当他们滚动到底部或SwipeRefreshLayout时。
希望这能有所帮助。
发布于 2016-12-23 18:46:46
主要的问题总是与图像,如果他们是高的,有总有OOM调用。此外,动画也没有帮助,特别是在列表/回收者的看法。试着缩小图像大小,使用单独的拇指。我更愿意切换到毕加索,而不是滑翔,因为它有调整大小的功能,这是相当好的工作,并提高性能与大图像显着。
https://stackoverflow.com/questions/41306242
复制相似问题