首先,我有一个简单的ListView
。实施BaseAdapter
并使用ViewHolder模式我只需TextView
就可以在每个getView()
调用中设置不同String
的文本。每个字符串都有不同的长度,它可以分成多行。
滚动时会发生过多的垃圾收集,这是由StaticLayout
类内部使用的TextView
引起的。它正在创建float[]
,然后垃圾收集器收集它们并导致我的ListView
滚动中出现断断续续的情况。跟踪滚动浏览分配跟踪器后,我得出了这个结论。请注意,过多并不是它收集了大量的内存,而是许多小内存。
由于我遇到了这个问题,即使我将代码简化为基础知识,我也认为有人在我面前遇到过这个问题。因为这是一个系统错误,而不是我仍在使用TextView
时可以解决的问题,你建议我使用什么作为这个错误的解决方法?
答案 0 :(得分:1)
我修复了这个行为,虽然我仍然不明白为什么会这样。在我的ListView
中,我将cacheColorHint设置为#00000000
,这与我android:windowBackground=@null
和android:windowContentOverlay=@null
的全局主题设置相结合时会出现问题。我不明白为什么它会导致过多的GC,也不清楚为什么简单地将cacheColorHint更改为#FFFFFFFF
会影响它,但是Android的绘图层次结构并不总是遵循最明显的路径。