我有一个非常复杂的应用程序,可以从各种后台线程和服务读取和写入数据库。有时候(不幸的是经常)我会遇到崩溃
尝试重新打开已关闭的对象
和
java.lang.IllegalStateException:无法执行此操作,因为 连接池已关闭。
我已经阅读了关于这个主题的几个SO问题,一般建议的范围从完全不关闭数据库连接,关闭/打开onCreate / onResume,关闭/打开应用程序,关闭/打开时需要执行对数据库等的操作。
我尝试的最后一件事是将我的所有打开/关闭移动到与db对象一起使用的实际方法中。这减少了错误的频率,但是当从不同的线程访问2个不同的方法时,我仍然遇到问题,都打开了数据库,但是当第二个正准备运行查询并且期望数据库被打开时,一个关闭连接
我知道我可以在一个公共锁对象上进行同步,因为我的数据库管理器类包括我的所有数据库访问方法都是单例,但是这样做只是为了打开/关闭感觉不好。
有什么建议吗?
答案 0 :(得分:0)
如果您不想同步db方法,请保持打开和关闭方法调用次数的计数,如下所示。
int count=0;
openDb(){
if(db==null){
//Open the db
}
count++;
}
public void closeDb(){
count--;
if(count==0){
//close the db
}
}