2

如何在Activity的單獨線程(即:AsyncTask)中訪問SQLiteDatabase數據庫,並確保始終保持它處於合法狀態?在Android的單獨線程中訪問數據庫

如果我理解正確的,線程可以在任何時候被殺死,數據庫可能會保持開放,這可能給人一種IllegalStateException(創建SQLiteDatabase 永不關閉)在後面的時間。

你如何處理這個問題?

回答

0

如果您AsyncTask由您Activity管理,然後Activity可以在適當的時候取消AsyncTask(當它成爲容易受到OS被殺死,例如Activity.onPause()後),所以AsyncTask.onCancelled()將被調用,您可以關閉DB 。

如果您的AsyncTask(或Thread)不是由您的Activity管理,那麼您有麻煩了,應該考慮重新設計您的架構。

0

兩種方式:

  1. 你能在那裏註冊一個Runtime.addShutdownHook(..)和關閉數據庫。

  2. 創建自定義Application並執行onLowMemory()關閉數據庫的位置。

+0

有沒有保證addShutdownHook會在所有活動被銷燬後始終運行? – hpique 2010-11-27 12:51:14