2011-08-17 52 views
0

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

回答

2

不要关闭数据库。让db助手类成为单例,并根据需要从您的活动中访问它。当你处理死亡时,数据库将被正确关闭。确保你关闭了你的游标。

+0

“当你处理死亡时,数据库将被正确关闭”<<你的意思是当应用程序被终止时,数据库会自动关闭吗? 好吧,我正在使用单身人士,在哪里打开和关闭? – Emerald214

+1

是的。打开你首先需要使用它,不要关闭。 –

+0

不工作=。=。始终有“完成尚未停用或关闭的游标”异常。我的应用程序使用列表视图,光标,AsyncTasks,不使用startManagingQuery,不关闭任何东西。 AsyncTask在onPostExecute()中的重新查询游标。我在StackOverflow上阅读了许多问题,但仍然没有最佳解决方案。我正在尝试其他方法...... – Emerald214

1

这是可能的解决方案,我能想到的...

protected void onPause() { 
     super.onPause(); 
     //before database close 
      if(asyncTask.getStatus() != AsyncTask.Status.FINISHED){ 
        asyncTask.cancel(true); 
      } 
      //close your database 
    } 

调用cancel(布尔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; 
} 

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

相关问题