3

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

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

非常感谢。

4

3 回答 3

3

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

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

2.)真的有必要在每次使用后保持打开和关闭光标吗?

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

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

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

于 2013-09-18T09:40:34.737 回答
1

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

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

3.invalid 表示无效... invalid Cursor 不能作为 Selvin sad 使用或重复使用

于 2013-09-18T08:45:51.497 回答
0

使用光标的最佳实践是使用加载器(尤其是cursorLoader)看看: https ://developer.android.com/guide/components/loaders.html

于 2013-09-18T08:31:00.080 回答