我正在创建一个Android应用程序,基本上是关于蘑菇的信息列表。我从sqlite数据库中获取此信息。我有一个全局单例,里面有一个服务类,我用它来访问我的数据库。几乎每个活动都访问数据库。最好是让我的数据库一直打开,还是打开并关闭它,因为我需要数据?
如果最佳做法是始终保持打开状态,那么我需要确保关闭它,如果我在活动被销毁时将其保持打开状态,最糟糕的情况是什么?
我正在创建一个Android应用程序,基本上是关于蘑菇的信息列表。我从sqlite数据库中获取此信息。我有一个全局单例,里面有一个服务类,我用它来访问我的数据库。几乎每个活动都访问数据库。最好是让我的数据库一直打开,还是打开并关闭它,因为我需要数据?
如果最佳做法是始终保持打开状态,那么我需要确保关闭它,如果我在活动被销毁时将其保持打开状态,最糟糕的情况是什么?
基于我过去在Java中的经验,我会说最好关闭连接,它可能在一个小型Android应用程序中无关紧要,但如果你有10个应用程序正在运行并且所有应用程序都访问数据库,那么你有10个挂起的连接。再开始一些,迟早另一个应用程序将不得不等待,因为SQL服务器无法处理更多请求。
我想你可以把它想象成你电脑上的文件。您从中读取数据,然后在完成后关闭它。为什么要在应用程序中打开文件?
现在我对Android编程很新,所以我还没有实现数据库调用。但是几年前,当我在Java应用程序中遇到同样的问题时,我实现了一个数据库对象,我在其中连接到数据库。 “其他人”(类)必须调用数据库对象(单例或最终方法)来获取数据,有点像存储过程,但在应用程序中。
因此,我知道何时拨打电话以及何时停止。然后我进入超时状态,好像几分钟内什么也没发生,我会关闭与数据库的连接。 (这也处理了一些超时异常,因为连接的超时永远不会发生。)当输入新的呼叫时,我可以轻松地启动新连接并使用新的数据库连接。
基本上我通过使用方法来抽象SQL调用 public Fungus[] getAllFungus()
和 public Fungus[] getFilteredFungus(string where)
。
基于我过去在Java中的经验,我会说最好关闭连接,它可能在一个小型Android应用程序中无关紧要,但如果你有10个应用程序正在运行并且所有应用程序都访问数据库,那么你有10个挂起的连接。再开始一些,迟早另一个应用程序将不得不等待,因为SQL服务器无法处理更多请求。
我想你可以把它想象成你电脑上的文件。您从中读取数据,然后在完成后关闭它。为什么要在应用程序中打开文件?
现在我对Android编程很新,所以我还没有实现数据库调用。但是几年前,当我在Java应用程序中遇到同样的问题时,我实现了一个数据库对象,我在其中连接到数据库。 “其他人”(类)必须调用数据库对象(单例或最终方法)来获取数据,有点像存储过程,但在应用程序中。
因此,我知道何时拨打电话以及何时停止。然后我进入超时状态,好像几分钟内什么也没发生,我会关闭与数据库的连接。 (这也处理了一些超时异常,因为连接的超时永远不会发生。)当输入新的呼叫时,我可以轻松地启动新连接并使用新的数据库连接。
基本上我通过使用方法来抽象SQL调用 public Fungus[] getAllFungus()
和 public Fungus[] getFilteredFungus(string where)
。
这里最好的选择是重构,以便您的应用程序通过ContentProvider访问数据库。您的ContentProvider实现是唯一具有数据库打开句柄的实现。
这为您提供了几个优势:
使用ContentProvider,可以将三个或四个标准类粘合在一起,以生成数据库的浏览器接口,从而实际上不必编写任何真实的逻辑。
从消极方面来说,ContentProviders只支持通过有限的接口进行访问 - 在SQL术语中,您可以获得INSERT,SELECT,UPDATE和DELETE而不使用嵌套子句。如果您正在执行复杂的SQL操作,将请求从您的应用程序路由到ContentProvider并再次返回可能会有点痛苦。但是,大多数人不需要这样做(如果你这样做,自定义意图是要走的路)。
我会根据需要打开数据库。这样,一旦打开它的特定活动完成,您就确定连接已关闭。尽管Android已内置检查以确保在应用程序终止时关闭,但安全方面并不会造成伤害。我也猜测它一直打开可能会导致泄漏或其他什么。