安卓开发中的Ormlite,值得发布这个帮助程序吗?

3
如建议所述,我正在使用单例模式获取助手(我确保在应用程序的onCreate()中首先创建它,使用应用程序上下文)。
然后从不同的[Intent]服务中使用此助手,但我对释放感到困惑:我已经阅读了这个related question,但ormlite关于releaseHelper()的文档似乎是矛盾的:
警告:当您的应用程序或服务终止或者您的代码不再以任何方式使用助手或派生DAO时,应在类似于onDestroy()的方法中调用此方法。不要在期望在应用程序终止之前再次调用{@link #getHelper(Context)}的情况下调用此方法。
上述警告的第二部分告诉我们,在应用程序终止之前如果我们期望再次调用getHelper(),就不要调用releaseHelper(),而如果在应用程序进程终止之前启动了另一个服务,这很可能是发生的!
此外,根据this post,在安卓上不释放助手听起来是安全的。

我是否误解了?

2个回答

2

1

我是否误解了?

不确定您是否理解。

一旦数据库被关闭,即当应用程序的最后一部分释放DatabaseHelper时,它将无法重新打开。警告只是为了确保如果某个后台任务正在使用数据库,则在进行最后一次调用releaseHelper()之后,它不应该要求获取帮助器。如果有后台任务,则它们应该获取帮助器并保持它,直到任务完成。


1
我对这个javadoc也感到困惑。OpenHelperManager记录了getHelper()方法被调用的次数。而releaseHelper()方法则检查这个计数是否为正数,或者是否已经达到零次使用。所以每次调用getHelper()方法后,我需要调用一次releaseHelper()方法,否则这个条件永远不会发生。对于具有onCreate和onDestroy配对的活动来说,这是没问题的。但是如果我在其他类中使用App上下文调用getHelper()方法,我需要在finally块中调用releaseHelper()方法,是吗? - Leos Literak
我认为最好的方法是在每个活动中使用一个帮助程序,在onDestroy中关闭它。并在每个工作线程中获取另一个帮助程序,在finally块中关闭它。但我不太理解不能重新打开的部分。这是否意味着我不能在一个块中两次打开和关闭DatabaseHelper?当引用计数为零时,如果我们再次调用getHelper会发生什么? - Kimi Chiu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接