【问题标题】:ListView + single textview in each item = excessive garbage collectingListView + 每个项目中的单个 textview = 过多的垃圾收集
【发布时间】:2011-10-30 03:35:16
【问题描述】:

首先我有一个简单的ListView。实现BaseAdapter 并利用 ViewHolder 模式,我只是有一个TextView,在每个getView() 调用上将文本设置为不同的String。每个字符串有不同的长度,可以分成多行。

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

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

【问题讨论】:

  • 你可能做错了什么。发布您的代码。
  • +1 以上。邮政编码,否则无法分辨。

标签: android android-listview textview


【解决方案1】:

我修复了该行为,尽管我仍然不明白为什么会发生这种情况。在我的ListView 中,我将cacheColorHint 设置为#00000000,当与android:windowBackground=@null 和android:windowContentOverlay=@null 的全局主题设置结合使用时,这会导致问题。我不明白为什么会导致过多的 GC,也不明白为什么简单地将 cacheColorHint 更改为 #FFFFFFFF 会影响它,但是 Android 的绘图层次结构并不总是遵循最明显的路径。

【讨论】:

    猜你喜欢
    • 2016-08-10
    • 1970-01-01
    • 2018-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    • 2012-07-09
    相关资源
    最近更新 更多