【发布时间】:2010-10-08 13:16:49
【问题描述】:
在过去的几天中,由于我的应用程序中的数据库泄漏,我经常收到很多错误消息,所以现在我打开数据库,从中获取查询结果并再次关闭数据库。
但我还为我的自动完成文本视图使用了光标适配器。
我是否也应该这样做:打开数据库,获取光标,关闭数据库?!
我的意思是,我没有因为不这样做而遇到任何问题,但是......
所以我需要专家的建议,你的建议
【问题讨论】:
在过去的几天中,由于我的应用程序中的数据库泄漏,我经常收到很多错误消息,所以现在我打开数据库,从中获取查询结果并再次关闭数据库。
但我还为我的自动完成文本视图使用了光标适配器。
我是否也应该这样做:打开数据库,获取光标,关闭数据库?!
我的意思是,我没有因为不这样做而遇到任何问题,但是......
所以我需要专家的建议,你的建议
【问题讨论】:
您应该能够在 onCreate 方法中打开数据库并在 onDestroy 方法中关闭它。这将保证只要 Activity 处于“活动状态”,它就可以使用,并且最终会被清理掉。
此外,您可能应该在与适配器一起使用的光标上使用“startManagingCursor”。这将确保它在暂停、恢复和销毁时分别被停用、重新查询和关闭。适配器中未使用的游标应在您完成从它们获取数据后立即关闭。
如果你遵守这些规则,应该不会有泄漏。
【讨论】:
您应该始终关闭您的数据库连接。
【讨论】:
不要考虑使用finalize() 关闭数据库连接。无法保证它何时会被调用,或者即使会被调用。更多详情请参阅《Effective Java》第二版第 7 条。
您可以使用onPause()、onResume() 来关闭/打开连接吗?我相信 android 提供了一些保证这些被调用。
【讨论】: