【问题标题】:Listview Adapter with SQLite Query's带有 SQLite 查询的 Listview 适配器
【发布时间】:2013-03-18 23:53:18
【问题描述】:

我有一个快速的性能问题;我有一个填充列表视图的 ListView 适配器,我打开我的 sqlite 数据库并在填充视图结束时将其关闭,然后从 SQLite 数据库填充有关列表行的一些信息。我注意到主要在滚动时这样做会严重影响性能,这是有道理的。我想知道如何提高滚动的性能。我查询数据库大约 3 次。

Database db = new Database(context);
db.open();
viewHolder.first.setText(db.queryFirst());
viewHolder.second.setText(db.querySecond());
viewHolder.third.setText(db.queryThird());
db.close();

我应该保留对 DB 的引用作为实例变量,并在查询时打开和关闭,或者我应该如何处理?

【问题讨论】:

  • 我通常在 onCreate 中打开数据库并在 onDestroy 中关闭它。
  • 我可能会遇到并发问题,因为我正在运行一些需要访问数据库的服务。
  • 服务是否写入数据库。
  • 为什么不使用 simpleCursorAdapter?
  • @HoanNguyen 该服务可能会写入它所依赖的数据库。我还需要在数据库中查询更多状态,而不仅仅是获取特定行的信息以映射到视图。

标签: android performance sqlite listview android-listview


【解决方案1】:

我想知道如何提高滚动性能。我查询数据库大约 3 次。

我建议为整个适配器查询一次数据库。目前,您正在为每一行发送三个查询,并且没有一个被缓存。从驱动器读取是一个缓慢的过程,Cursor 旨在非常有效地获取大量数据,CursorAdapter 旨在使用尽可能少的资源。使用一个 Cursor 和一个 CursorAdapter 将允许用户滚动而不会注意到任何性能损失。

【讨论】:

  • 你是对的我现在已经批量处理我的查询并且加载延迟消失了。我不得不退后一步,检查我的整体逻辑,不过感谢您的出色回答!
【解决方案2】:

还有一个名为 ORMLite 的库,它允许您非常轻松地操作数据库并返回一个列表,这意味着您首先加载数组并且您没有任何滚动性能问题。这与数据库的延迟加载部分相结合,可让您无缝提高滚动性能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-08
    • 2013-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多