当AsyncTask使用数据库时,活动将关闭

时间:2011-08-17 20:23:53

标签: android

My Activity在onResume()中打开一个数据库,并在onPause()中关闭它。当Activity启动时,许多使用该数据库的AsyncTasks都会执行。当我按下Back按钮时,数据库被关闭并出现错误,因为AsyncTask正在使用它。这个问题的解决方案是什么?

2 个答案:

答案 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;
}

希望至少给出一些方向来解决你的问题。