什么是更快 - 一个Cursor或ArrayList?

时间:2015-05-01 15:33:11

标签: java android sqlite arraylist cursor

我有一个SQLite数据库,我必须不断地从中检索数据。可以在每次检索之间对数据进行更改。

我的目标是最大化应用程序性能,那么执行此检索的最快方法是什么?

我可以想象2:

  • 不断打开和关闭新游标

  • 查询开头的所有数据并将其存储在ArrayList中。更改数据时,使用indexOf更改SQLite DB和ArrayList。

---- EDITED ----

我需要数据才能在Google地图中创建标记。

我考虑过使用CursorLoader,但因为我不需要与其他我不想使用内容提供商的应用进行交互。

创建自定义加载器是个好主意吗?

2 个答案:

答案 0 :(得分:5)

简而言之,虽然并不总是那么简单,但最快的做事方法就是一次性。

不断地对数据库进行调用可以真正使您的应用程序性能瓶颈,特别是如果它是服务器而不仅仅是您的设备SQLite数据库。

根据您对数据的处理方式,您可以查看类似CursorAdapter的内容,它处理数据库中行的显示,以及每次插入/更新行时,CursorAdapter将相应地更新ListView。它还处理打开/关闭/移动到下一个Cursor,使开发人员可以轻松阅读。

然而,再次尝试尽可能少地打电话。如果您坚持使用ArrayList:

  • 在所有项目的开头打一个电话。
  • 遍历该光标并将项添加到数组列表中。
  • 使用数组列表作为缓存。当然,您可以在每次更新列表时更新数据库(这可能是最安全的,IMO),或者您可以循环浏览列表并在应用程序关闭时插入/更新/删除。如果采用这种方法,请确保使用onPause()之类的方法执行此操作,因为它是可以杀死活动的最早方法之一。

答案 1 :(得分:2)

CursorLoader的完美用例。给定查询,它会使您的列表适配器与最新数据保持同步,假设您在数据库中发生更改时通知。它还可以方便地为您处理活动生命周期事件(即,它在活动结束时关闭光标,在暂停时停止更新等)。