2011-08-17 20 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; 
} 

希望這至少給一些方向來解決你的問題。

相關問題