My Activity在onResume()中打开一个数据库,并在onPause()中关闭它。当Activity启动时,许多使用该数据库的AsyncTasks都会执行。当我按下Back按钮时,数据库被关闭并出现错误,因为AsyncTask正在使用它。这个问题的解决方案是什么?
答案 0 :(得分:2)
不要关闭数据库。让您的db帮助程序类成为单例,并根据需要从您的活动中访问它。处理死亡时,数据库将正确关闭。确保你关闭你的游标。
答案 1 :(得分:1)
这是我能想到的可能解决方案......
protected void onPause() {
super.onPause();
//before database close
if(asyncTask.getStatus() != AsyncTask.Status.FINISHED){
asyncTask.cancel(true);
}
//close your database
}
调用cancel(boolean mayInterruptIfRunning)不一定会停止后台线程。但你可以在doInBackground方法中做些什么......
protected Void doInBackground(Void... params) {
if(!(isCancelled())){
//if async task not cancelled
//Database still open and good to use
} else {
//database is closed
}
return null;
}
希望至少给出一些方向来解决你的问题。