最佳光标使用

时间:2013-09-18 08:20:07

标签: android android-cursor

我偶然发现了很多关于使用Cursor对象的链接,但没有关于它如何最佳使用的信息。所以我有几个问题,我真的很想回答。

  • 是否可以使用一个Cursor进行所有应用程序的数据库操作?如果不是,为什么?
  • 每次使用后是否真的有必要保持打开和关闭Cursor
  • this链接上close()的定义为Closes the Cursor, releasing all of its resources and making it completely invalid.当它变为无效时会发生什么?它可以重复使用吗?

非常感谢。

3 个答案:

答案 0 :(得分:3)

1.)是否可以将一个Cursor用于所有应用程序的数据库操作?如果不是,为什么?

是。可以重用光标。但是你应该知道Cursor的工作并不像你想象的那么直观。游标不从某些数据存储中获取所有数据并将所有数据存储在内存中。相反,它只根据需要提取数据,从而最大限度地减少内存使用。因此,在重新初始化之前关闭Cursor总是一个好主意。话虽如此,每次需要创建一个全新的Cursor时,确实没有太多的性能损失。

2.)每次使用后是否真的有必要保持打开和关闭游标?

是的,是的,是的。我曾经在调试一些网络应用程序时遇到很多问题,这些应用程序定期将手机的活动同步到本地数据库,然后发送到外部服务器。打开和关闭(特别是关闭)非常重要,就像在java或android中进行通信的任何其他流或端点一样,例如FileInputStream或Socket

3.)在此链接上,close()的定义是Closes the Cursor,重用其所有资源并使其完全无效。当它变得无效时会发生什么?它可以重复使用吗?

正如我上面所说,close()方法与Java中其他类的大多数其他close()方法一样。一旦调用它,就不应该再次使用Cursor。这就像Socket的类close()方法一样。一旦Socket关闭,它就无法用于进一步的网络连接(即无法重新连接或反弹)。需要创建一个新的套接字。

答案 1 :(得分:1)

1.每个查询都返回一个新的Cursor。因此,您可以使用相同的本地游标并使用返回的游标重新初始化

2.有必要关闭每个光标。因为某些意外的错误/强制关闭可能会损坏您的数据库,所以它是打开的,也是为了释放资源

3.invalid表示无效...无效光标无法使用或重新使用为Selvin sad

答案 2 :(得分:0)

使用游标的最佳做法是使用加载器(特别是cursorLoader)看看: https://developer.android.com/guide/components/loaders.html