如何在Activity
的單獨線程(即:AsyncTask
)中訪問SQLiteDatabase
數據庫,並確保始終保持它處於合法狀態?在Android的單獨線程中訪問數據庫
如果我理解正確的,線程可以在任何時候被殺死,數據庫可能會保持開放,這可能給人一種IllegalStateException
(創建SQLiteDatabase 永不關閉)在後面的時間。
你如何處理這個問題?
如何在Activity
的單獨線程(即:AsyncTask
)中訪問SQLiteDatabase
數據庫,並確保始終保持它處於合法狀態?在Android的單獨線程中訪問數據庫
如果我理解正確的,線程可以在任何時候被殺死,數據庫可能會保持開放,這可能給人一種IllegalStateException
(創建SQLiteDatabase 永不關閉)在後面的時間。
你如何處理這個問題?
如果您AsyncTask
由您Activity
管理,然後Activity
可以在適當的時候取消AsyncTask
(當它成爲容易受到OS被殺死,例如Activity.onPause()
後),所以AsyncTask.onCancelled()
將被調用,您可以關閉DB 。
如果您的AsyncTask
(或Thread
)不是由您的Activity
管理,那麼您有麻煩了,應該考慮重新設計您的架構。
兩種方式:
你能在那裏註冊一個Runtime.addShutdownHook(..)
和關閉數據庫。
創建自定義Application
並執行onLowMemory()
關閉數據庫的位置。
有沒有保證addShutdownHook會在所有活動被銷燬後始終運行? – hpique 2010-11-27 12:51:14