gpt4 book ai didi

android - 是否存在具有 View 回收功能的 Gallery 小部件的替代品?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:35:26 24 4
gpt4 key购买 nike

Android 上的默认 Gallery 小部件不回收 View - 每次调用新位置的 View 时,小部件总是调用适配器的 getView 方法并设置了 convertView为空。

当您向后和向前滚动时,最终会创建大量 View ,而 Gallery 将它们存储在其中的回收器组件似乎没有足够快地回收它们,从而导致 OOM 情况。

您可以使用一些大图像作为您的画廊项目轻松地对此进行测试,但最终只有一个 TextView 会导致它。在适配器的 getView 方法中放置一个带有计数器的日志语句,也可以查看创建了多少新 View 。

是否存在行为类似于图库但也实现 View 回收的第三方小部件?

最佳答案

最后,我的解决方案是按照@CommonsWare 的建议修改 Gallery 源代码。这还需要复制以下文件:

  • 适配器 View
  • AbsSpinner

但是这些都非常简单。

之后,我修改了代码以执行以下操作:

RecycleBin (AbsSpinner)

  • Place objects in the recycler one after another, rather than according to position
  • Retrieve objects from the bottom of the recycler, regardless of the position requested
  • The existing implementation assumed that each different position in the adapter resulted in a unique view. The changes above are only good if your Gallery contains only one type of item, if not you'll need to add some sort of key based on item type and the amount of that type required

Gallery

  • Used reflection (ugh) to modify the private mGroupFlags variable of ViewGroup to allow child re-ordering - I also set a boolean value indicating whether the field access succeeded which I test before using the component.
  • Removed all calls to mRecycler.clear()
  • The number of items the gallery has to display changes as it scrolls and the existing implementation would clear the recycler when (a) setSelection was called (b) a motion scroll occurred

通过这些修改,我在适配器中的 newView 方法中的计数器达到了... 7。

Here is the code (置于公共(public)领域 2013/08/07 下 http://en.wikipedia.org/wiki/WTFPL )

关于android - 是否存在具有 View 回收功能的 Gallery 小部件的替代品?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5789879/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com