我们都learn应该尽早获取资源(例如数据库连接)并尽早发布。
然而,将此原则应用于Android上的SQLite数据库连接已经让我感到头痛。
我有一个应用程序,它从后台服务器的后端服务器下载更新,并定期向数据库写入更新。当出现以下序列时,我遇到的问题出现了:
服务和活动都使用相同的SQLiteOpenHelper
类(尽管是不同的实例)来打开它们的连接。我最初的假设是,这应该可以正常工作,但不知何故,似乎底层连接在两个数据库实例之间共享。
要解决这个问题,我最终没有关闭数据库对象,只关闭任何打开的游标。这似乎有效,但我不确定我是不是在这里泄漏记忆。
这里有什么显而易见的东西吗?
答案 0 :(得分:1)
这里有什么显而易见的东西吗?
我会说不。查看SQLiteOpenHelper
的源代码,我看不出两个实例如何共享SQLiteDatabase
对象。
一些诊断建议:
toString()
的{{1}}值,它应该为您提供Java实例ID。如果它们是相同的,那就是你的问题所在,你将需要按照上游的方式去弄清楚这是怎么回事(例如,你真的使用SQLiteDatabase
的相同实例)。 SQLiteOpenHelper
,而不是通过SQLiteDatabase
,并查看是否变化很重要。