gpt4 book ai didi

java - Android SQL 数据库打开和关闭 - 竞争条件

转载 作者:行者123 更新时间:2023-11-29 22:25:26 25 4
gpt4 key购买 nike

我有一个相当复杂的应用程序,它从各种后台线程和服务读取和写入数据库。有时(不幸的是经常)我会因

崩溃

attempt to re-open an already-closed object

java.lang.IllegalStateException: Cannot perform this operation because the connection pool has been closed.

我已经阅读了有关此主题的一些问题,一般建议包括根本不关闭数据库连接、关闭/打开 onCreate/onResume、在应用程序中关闭/打开、在需要执行操作时关闭/打开对数据库等的操作

我尝试的最后一件事是将所有打开/关闭移动到与数据库对象一起使用的实际方法中。这减少了错误的频率,但是当从不同的线程访问两种不同的方法时,我仍然遇到问题,两种方法都打开数据库,但当第二个方法即将运行查询并期望打开数据库时,其中一个方法会关闭连接.

我知道我可以在一个公共(public)锁对象上进行同步,因为包含所有数据库访问方法的数据库管理器类是一个单例,但是仅针对打开/关闭这样做感觉很糟糕。

有什么建议吗?

最佳答案

如果您不想同步数据库方法,请维护打开和关闭方法调用数量的计数,如下所示。

int count=0;

openDb(){
if(db==null){
//Open the db
}
count++;
}

public void closeDb(){
count--;
if(count==0){
//close the db
}
}

关于java - Android SQL 数据库打开和关闭 - 竞争条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30303932/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com