【发布时间】:2011-02-10 11:22:34
【问题描述】:
我们都learn 认为数据库连接等资源应该晚获取,早释放。
然而,将这一原则应用于 Android 上的 SQLite 数据库连接让我有些头疼。
我有一个应用程序,它可以在后台运行的服务中从后端服务器下载更新,并定期将更新写入数据库。当以下顺序发生时,就会出现我遇到的问题:
- 服务打开一个可写的数据库连接
- 一些活动打开了一个可读的数据库连接
- 服务在读取数据的活动同时关闭其数据库连接
- 活动因数据库连接已关闭而失败
服务和活动都使用相同的SQLiteOpenHelper 类(尽管实例不同)来打开它们的连接。我最初的假设是这应该可以正常工作,但不知何故,底层连接似乎在两个数据库实例之间共享。
为了解决这个问题,我最终不关闭数据库对象,只关闭所有打开的游标。这似乎有效,但我不确定我没有在这里泄漏内存。
我这里有什么明显的遗漏吗?
【问题讨论】:
-
“并发”是什么意思?服务是否运行后台线程?
-
@Graham:是的,如前所述,该服务正在后台运行,在单独的线程上运行。
-
是的,我的意思是“同时”。
-
你是在实例化 SQLiteOpenHelper 的两个子类吗?
-
@Tim:是的,如前所述,助手类的实例不共享。
标签: android multithreading sqlite