每个项目中的ListView +单个textview =过多的垃圾收集

时间:2011-10-30 03:35:17

标签: android android-listview textview

首先,我有一个简单的ListView。实施BaseAdapter并使用ViewHolder模式我只需TextView就可以在每个getView()调用中设置不同String的文本。每个字符串都有不同的长度,它可以分成多行。

滚动时会发生过多的垃圾收集,这是由StaticLayout类内部使用的TextView引起的。它正在创建float[],然后垃圾收集器收集它们并导致我的ListView滚动中出现断断续续的情况。跟踪滚动浏览分配跟踪器后,我得出了这个结论。请注意,过多并不是它收集了大量的内存,而是许多小内存。

由于我遇到了这个问题,即使我将代码简化为基础知识,我也认为有人在我面前遇到过这个问题。因为这是一个系统错误,而不是我仍在使用TextView时可以解决的问题,你建议我使用什么作为这个错误的解决方法?

1 个答案:

答案 0 :(得分:1)

我修复了这个行为,虽然我仍然不明白为什么会这样。在我的ListView中,我将cacheColorHint设置为#00000000,这与我android:windowBackground=@nullandroid:windowContentOverlay=@null的全局主题设置相结合时会出现问题。我不明白为什么它会导致过多的GC,也不清楚为什么简单地将cacheColorHint更改为#FFFFFFFF会影响它,但是Android的绘图层次结构并不总是遵循最明显的路径。