【发布时间】:2012-08-29 14:10:34
【问题描述】:
我的应用程序中的活动包含片段,而片段又包含充满位图数据的列表视图/网格视图。最终用户将耗尽内存,因为先前活动的视图及其片段没有被破坏。因此,当用户达到第 10 个活动时 - 前 9 个活动持有大量位图数据。
我已经在使用弱引用,但是 MAT 表示某些片段的视图包含对例如 Gallery 的引用,而 Gallery 又包含适配器等。因此 ImageViews 保持活动状态,位图也是如此。
到目前为止,我已经尝试过完全移除片段、移除适配器。有时它可以工作,但我想知道为什么这会如此复杂,是否有任何更简单的方法可以在没有太多编码的情况下释放/获取?
UPD
我会很感激有一个开源应用程序的例子,其中遇到了同样的问题。
UPD2
我的大部分活动的蓝图是:活动持有片段。片段包含充满图像视图的 AbslistView。
谢谢。
【问题讨论】:
-
不看代码真的很难判断。
-
如果您的 ImageViews 仍然存在,您应该仔细检查适配器中的回收。观看次数应该与您在屏幕上看到的大致相同。
-
我不回收它们 - 我应该吗?我的意思是,如果我回收它们,那么它会抛出有关图像视图缺少的帧的异常。这里有什么解决方法吗?
-
适配器应该总是回收视图。搜索
viewholder和convertview。 -
假设您在需要时动态创建
Bitmaps,并且您只为ListView中的每一行使用唯一的位图实例,如果您在@ 中找到一个,您应该能够recycle()它们987654326@。但是在这种情况下,通过 GC 自动回收对我来说效果很好,因为在显示列表时一次只需要很少的小位图。只是没有ArrayList<Bitmap>或列表中每个项目的图像等效项。