在Android上保持单一数据库连接

时间:2012-09-16 06:13:01

标签: android database singleton blocking

这个问题似乎与我读过的许多内容非常相似,但是我再也找不到任何能满足我的代码。 (或者我太困了才意识到这一点)

我有一个单独的数据库帮助程序,以确保只存在其中一个。问题不在这里。在尝试确保仅使用getReadableDatabasegetWritableDatabse方法时只存在一个数据库连接时遇到问题。

我知道它在大多数情况下返回相同的引用,我可以处理它的使用,但我不知道该怎么办,以防我只读连接打开(可能是内存不足)而另一个线程想要打开可写连接。我想阻止写入线程,直到只读连接关闭,然后尝试打开可写连接。

你是怎么做到的?这可能只能通过一些线程锁定在Java中完成,但不确定应该使用哪种方法。

P.S。如果我遗漏了某些东西 - 请随时告诉我应该如何以其他方式完成。

1 个答案:

答案 0 :(得分:1)

我过去经历过同样的问题,同步就是答案。简单地说,在databasehelper实例上进行同步。或者你可以做的是为getWritableDatabase创建一个包装器方法,并在方法声明中使用synchronized关键字。然后永远不要调用getReadableDatabase而只调用包装器方法。由于getReadableDB和getWritableDB提供相同的引用,因此这样做是安全的。有意义吗?