2011-04-21 89 views
3

我的Android应用程序经常记录错误,抱怨说我未能发布我的语句,游标和数据库。实际上,我在使用它们的代码的最后{}块中明确地释放了所有游标,并且在包含它们的类的finalize()方法中关闭了我的数据库。Android:我真的需要担心关闭SQLite数据库实例吗?

我的应用程序的结构使我很难在数据库对象(除了终结器)上显式调用close()方法,因为例如,使用数据库的类不是Activity类但可能是一个由Activity间接使用的类。所以这个类本身并不知道它最终所附的活动何时被销毁。

我需要关注这个吗?我是否通过不明确地关闭数据库实例来泄漏某些资源?有没有什么危险会导致某些东西无法写入文件? Android上的SQLite实现是否写入缓存?我可以关闭它或强制同步吗?

什么是Android VM的终结者策略 - 它们是否能够最终运行?

弗兰克

回答

1

我发现在我的应用程序一个强制关闭的问题,这是一个未关闭连接的结果。在我的情况下,查询花了很长时间,用户可以返回到一个活动并重新点击强制一个新的查询。

我仅在调试应用程序时发现此问题,因为它最终出现了一些代码,我认为该代码在该执行点不可行。

简单地关闭我的连接解决了这个问题。所以,漫长的故事漫长不能伤害整洁。猜测你知道,无论如何,你只是在寻找验证?

+1

是的,我通常会清理东西,但在这种情况下,我将数据库功能添加到已存在的东西。对于在非gc环境中保证的析构函数调用,有些话要说。清理的好地方。 – 2011-04-21 20:26:35