【发布时间】:2011-12-04 20:44:30
【问题描述】:
尝试关注关于列表的一般“注意事项”,例如是 添加和删除 200 项列表中的 30 项比清除更好 并重新填充?或者这方面的任何其他提示 - 我真的不能尝试 在我的手机上,为此禁食:-)
有什么方法可以计算列表操作的内存开销/计算能力。背景如下:
我在页面上有一个列表视图,该页面有例如底部的 3 个选项卡(全部、搜索、最近)。现在,如果您单击一个选项卡,列表视图应该会向您显示适当的项目。
现在有两种不同的方法,一种是:
使用单个 ListAdapter,相应地过滤项目
- 如果单击全部,只需将数据库中的所有项目都放入其中
- 如果你点击最近,只要把符合要求的项目放上去
使用两(三个..)ListAdapters,每个类别一个
- 如果单击全部,则将列表的 setAdapter() 设置为适当的一个
- 如果你点击最近,setAdapter() 到合适的一个
我们谈论的是一个包含 200 个项目的列表,它们是从数据库中创建的复杂对象。当例如搜索一个项目,你输入部分标题,列表应该只显示适当的项目。这些项目不会被重新创建,我只会查询 ID,并使用缓冲的项目(请参阅后面的数据结构)。
我也不确定“在哪里过滤”,我可以在数据库中进行(从 where title LIKE abc 中选择),然后是:
- 从列表中删除不匹配项并添加所有匹配(但不包括)项
- 清除整个列表,添加所有匹配项
再次澄清App数据的结构:
- 数据库包含原始的简单条目(带有 ID + 标题 + ...)
- HashSet 具有复杂的条目,从数据库创建一次,只读 + 总是所有条目
- ArrayList 显示在 listView 中的当前条目
我希望你明白我的意思,我正在尝试感受一下“昂贵”的操作。也许,作为回答的最后动力,我会写一些案例,您可以就它们的成本发表意见:
- 从带有“title LIKE”的 DB 中选择 N 个项目(仅限 ID)
- 使用“title.contains()”迭代包含 200 个项目的列表并仅使用匹配项
- 从列表视图显示的数组列表中删除 100 个项目
- 从未显示的数组列表中删除 100 个项目,然后连接并显示
感谢您提供任何反馈或任何有关不良做法的提示。通过处理可见列表元素,而不是先“在后台”执行,然后设置新的 ListAdapter,尤其是可能的事件触发问题
【问题讨论】:
-
来自 cmets,我认为最好更改您接受的答案
标签: android performance android-listview