多个ListAdapter或单个,使用过滤(Android性能)

Chr*_*ert 5 performance android android-listview

尝试关注有关列表的一般"dos和donts",例如,添加和删除200项目列表中的30项更好然后清除和重新填充?或者在这方面的任何其他提示 - 我真的不能尝试我的手机,快速为此:-)

有没有办法计算列表操作的内存开销/计算能力.背景如下:

我在页面上有一个列表视图,页面底部有3个选项卡(全部,搜索,最近).现在,如果您单击选项卡,listview应该显示适当的项目.

现在有两种不同的方法,一种是:

使用单一ListAdapter,筛选项目相应的
-如果您单击全部,只是把从数据库中的所有项目到它
-如果您单击最近,只是把其中符合要求的项目

使用两个(三个)ListAdapter,每个类别一个
- 如果单击全部,将列表的
addAdapter()设置为适当的 - 如果单击"最近",则将"适配器"()设置为适当的一个

我们讨论的是200个项目的列表,这些项目是从数据库中创建的复杂对象.例如,当搜索项目时,您输入标题的一部分,列表应仅显示相应的项目.这些项目不会被重新创建,我只会查询ID,并使用缓冲的项目(请参阅后面的数据结构).

我还不确定的是"在哪里过滤",我可以在数据库中做到(从标题LIKE abc中选择),然后是EITHER:

  • 从列表中删除不匹配的项目并添加所有匹配(但不包括)的项目
  • 清除整个列表,添加所有匹配的项目

再次,澄清App数据的结构:

  • 包含原始简单条目的数据库(带ID +标题+ ...)
  • 具有复杂条目的HashSet,从DB创建一次,readonly +始终是所有条目
  • listView中显示的当前条目的ArrayList

我希望你得到我的漂移,我想要感受"昂贵"的操作.或许,作为回答的最后动机,我会写下一些案例,你可以就它们的成本给出一个意见:

  1. 使用"标题LIKE"从DB中选择N个项目(仅限ID)
  2. 使用"title.contains()"迭代200个项目的列表并仅使用匹配项
  3. 通过列表视图从arraylist SHOWN中删除100个项目
  4. 从未显示的arraylist中删除100个项目,然后连接并显示

感谢任何反馈,或任何不良做法的提示.特别可能的事件通过处理可见列表元素触发问题,而不是首先"在后台"执行,然后设置新的ListAdapter

rds*_*rds 2

我看到您已经接受了答案,但我认为我不同意,因为ArrayList如果中间添加或删除了元素,则必须复制所有元素。

我知道您已经拥有HashSet所有条目。

在这种情况下,我相信最有效的适配器是一个定制的ListAdapter灵感来自ArrayAdapter

  • 您的适配器存储ArrayList mAllObjects所有条目(对于“所有”选项卡)。
  • 您的适配器存储ArrayList mRecentObject最近的条目(对于“最近”选项卡)
  • 您的适配器存储ArrayList mMatchObject匹配条目(用于“搜索”选项卡)
  • 您的适配器有两个过滤器
    • 最近的过滤器返回mRecentObject列表(如果尚不存在则创建它)
    • 匹配过滤器创建一个新mMatchObject列表并添加匹配元素。这里无需进行优化。delete()ArrayList 上的方法是 O(n) 。