2012-04-14 46 views
1

我有一個使用AsyncTask下載並將某些數據保存到數據庫的活動。爲了打開數據庫,我們需要將Context param傳遞給SQLiteOpenHelper的onCreate方法,這意味着數據庫不知何故需要上下文。在Android上重新創建活動時使用DatabaseHelper

而我只是好奇,當設備轉向和活動經歷破壞和創建循環時會發生什麼?在activity的構造函數中而不是在activity的onCreate()方法中打開數據庫可以嗎?

的問題是,我使用DB從另一個線程,我想知道,當活動被破壞並重新創建

+0

必須覆蓋的onDestroy()方法,並在這裏關閉數據庫對象。 – 2012-04-14 18:59:43

+0

但是,如果我這樣做,後臺線程,應該保存下載的數據到數據庫,將崩潰。有沒有辦法讓它完成它的工作,然後關閉數據庫? – renal 2012-04-14 19:07:00

回答

1

一個解決方案是使用的ApplicationContext代替ActivityContext究竟會發生什麼。您只需要一個從Application構造函數中請求ApplicationContext的靜態方法。

如果你使用某種單例來訪問上下文,你不會有任何併發​​問題。

在這裏看到的例子:http://androidcookbook.com/Recipe.seam?recipeId=1218

另一種方法是使用它可以跟蹤打開的數據庫連接的LoaderManager。

在這裏看到:http://developer.android.com/reference/android/app/LoaderManager.html (有過一個完整的例子)

的LoaderManager是在兼容性包可供下降到Android 1.5

邁克爾

+0

謝謝你,邁克爾!我想,那就是我一直在尋找的。對不起,不能投票 – renal 2012-04-14 19:19:26

+0

歡迎您;-) – 2012-04-14 19:20:46

1

櫃面你想要做一些分貝在後臺操作。你應該使用「服務」。 服務可以在後臺執行長時間運行的操作。

這裏是鏈接:http://developer.android.com/guide/topics/fundamentals/services.html

+0

感謝您的回答!服務很好,但是我的線程需要在活動結束時與活動進行交流,所以,我認爲,AsyncTask更適合 – renal 2012-04-14 19:24:08

相關問題