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

标签 android database singleton blocking

这个问题似乎与我读过的许多问题非常相似,但话又说回来,我没有找到任何令我满意的代码。 (或者我太困了没意识到)

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

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

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

附言如果我遗漏了什么 - 请随时告诉我应该如何以其他方式完成。

最佳答案

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

关于android - 在 Android 上保持单一数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12444800/

相关文章:

java - 如何解决重复条目 : com/google/gson/JsonParseException. 类?

android - onAttach(上下文上下文)未被调用

iOS 解析如何通过 URL 下载文件

javascript - 带构造函数的语义 JavaScript 单例

ios - 单例实例自动释放的可能性

javascript - 在 Android 设备上选择后置摄像头 - jsartoolkit5

java - 如何在android中将ListActivities添加到ViewPager中?

database - 在 Golang 中缓存数据库结果( revel )

php - 使用 PHP/Laravel5 将数据从 Postgres 迁移到 MySQL

java - 如果父对象不是单例,那么子对象也是单例吗?