【发布时间】:2015-01-06 23:17:11
【问题描述】:
如果应用有一个包含大量行的本地数据库(我在想成百上千行,但为了论证,我们假设一百万或十亿行),将从 sql 查询返回所有行到光标并使用它来填充 ListView 会对性能产生负面影响?
请注意,(1)我不是在谈论返回所有列,这里讨论:
另外 (2),我不是在谈论与创建太多视图相关的性能问题。我理解回收视图的重要性,如下所述:
- Performance issue with ListView and CursorAdapter for large amount of data
- HowTo: ListView, Adapter, getView and different list items’ layouts in one ListView
并且 (3),我不是在谈论从网络速度慢的远程服务器获取数据。该应用拥有自己的本地数据库。
所以基本上我是在询问游标适配器是否内置了任何东西来继续查询数据库,或者它是否一次返回所有数据。也就是说,我是否应该一次只返回 100 行,然后在用户滚动到最后一行时重新查询数据库以获取接下来的 100 行?
在我的特定情况下,我正在制作消息传递应用程序,以保存所有以前发送的消息的历史记录。用户可以在 ListView 中查看所有发送的消息。
【问题讨论】:
-
你用的是什么适配器?
-
所以你可以使用专门的 AbstractWindowedCursor 只保留小的 CursorWindow 以最小化使用的内存
-
我向您推荐了 RecyclerView,它为大型数据集提供了有限的窗口。最终寻找无尽的回收视图。这是一个无尽的回收滚动监听器,当你到达最后时,你会加载更多数据gist.github.com/ssinss/…
-
@PanayiotisIrakleous 类型的视图与此无关,ListView 或 RecyclerView 几乎相同,重要的是适配器将数据映射到视图