我用大图像构建了一个无限滚动列表视图,可与 Instagram/Facebook/Tumblr 媲美
我将 基于 AbsListView 和https://github.com/nostra13/Android-Universal-Image-Loader的https://github.com/etsy/AndroidStaggeredGrid用于我的图像。我对我的项目使用视图模式。
问题是我不断收到 OOM 错误(+50 个项目和 200K 图像),我尝试了 Universal Image Loader (UIL) 的所有设置,但它只做了很少的改变。当我拿一个大的(2MB)drawable 并在没有 imageloader 的情况下填充它时,一切都很完美,并且项目在引擎盖下被回收。
似乎 UIL 和 Gridview 的组合不能一起工作,并且图像没有被回收。我尝试使用默认的 imageloader.showImage 以及 imageloader.loadimage 和 onLoadingCompleteCallback。此外,我尝试从视图中删除目标图像视图,但这只会导致性能下降。
已经尝试过的东西的快速列表:
- 禁用UIL的内存缓存
- 禁用 UIL 的磁盘缓存
.resetViewBeforeLoading(true)
UIL的使用- 调整大小的图像
- setRecyclerListener --> 网格的 onMovedToScrapHeap 构造(未调用!)
- 降低JPG质量
重要提示:它确实适用于普通的应用程序中的可绘制对象!
任何人都知道如何修复/调试这个?
堆栈跟踪:
java.lang.OutOfMemoryError
at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
at android.graphics.BitmapFactory.decodeStreamInternal(BitmapFactory.java:613)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:589)
at com.nostra13.universalimageloader.core.decode.BaseImageDecoder.decode(BaseImageDecoder.java:78)
编辑:替换 UIL for Android Volley 确实为我解决了这个问题,但这是一种解决方法。