Android 与从大型数据库中选择所有行以填充ListView相关的性能问题

Android 与从大型数据库中选择所有行以填充ListView相关的性能问题,android,mysql,listview,Android,Mysql,Listview,如果一个应用程序有一个包含大量行的本地数据库,我想是成百上千行,但为了论证起见,假设是一百万或十亿行,那么将sql查询中的所有行返回到游标并使用它填充ListView会对性能产生负面影响吗 请注意,1我不是说返回所有列,这里讨论的是: 第二,我不是在谈论与创建太多视图相关的性能问题。我理解此处讨论的回收观点的重要性: 第三,我不是说从远程服务器获取数据,因为远程服务器的网络速度较慢。该应用程序有自己的本地数据库 所以基本上我是在问游标适配器是否内置了任何东西来继续查询数据库,或者它是否一次返回所

如果一个应用程序有一个包含大量行的本地数据库,我想是成百上千行,但为了论证起见,假设是一百万或十亿行,那么将sql查询中的所有行返回到游标并使用它填充ListView会对性能产生负面影响吗

请注意,1我不是说返回所有列,这里讨论的是:

第二,我不是在谈论与创建太多视图相关的性能问题。我理解此处讨论的回收观点的重要性:

第三,我不是说从远程服务器获取数据,因为远程服务器的网络速度较慢。该应用程序有自己的本地数据库

所以基本上我是在问游标适配器是否内置了任何东西来继续查询数据库,或者它是否一次返回所有数据。也就是说,我应该一次返回100行,然后在用户滚动到最后一行时重新查询数据库中接下来的100行吗


在我的特殊情况下,我正在制作一个可以保存以前发送的所有消息的历史记录的消息应用程序。用户可以在列表视图中查看所有发送的消息。

请通过此链接了解试图从表中获取大量行时可能出现的一些性能问题

此外,我建议在部分中检索结果,稍后使用cursorjoiner。下面是一个关于如何使用它的好例子


您使用的适配器是什么?因此,您可以使用专门的AbstractWindowedCursor,它只保留小的CursorWindow以最小化所使用的内存。我建议您使用RecyclerView,它为大数据集提供了有限的窗口。结束查看无休止的recycler视图。这是一个无休止的回收器滚动监听器,当你到达最后加载更多数据@PanayiotisIrakleous类型的视图与此无关,ListView或RecyclerView几乎相同,重要的是,将数据映射到viewCursorJoiner的适配器在这里没有用处:可能OP可以使用MergeCursor,但当他的db非常大时,它在这里也没有用处,唯一的解决方案是定制AbstractWindowedCursor,带有固定大小的小CursorWindow,这样db大小就无关紧要了