2013-03-17 110 views
1

我正在使用CursorLoader和ContentProvider將數據庫的內容加載到GridView中。 「關閉()從未被明確要求在數據庫如何關閉Android中的ContentProvider中使用的數據庫

,我發現這個問題,並應對一些主題‘

的應用程序工作,但在日誌中寫入多次在ContentProvider的緊密數據庫’: 「內容提供者創建時,其託管過程中創建,只要過程中保持,所以沒有必要關閉數據庫」。

所以,什麼事情出錯? 由於數據庫是在ContentProvider內打開,如果關閉它,返回的遊標將爲空,我如何解決這個問題?

+1

確保你在'ContentProvider.onCreate'方法中打開數據庫,而不是在其他地方(例如在'insert'或query''中) – 2013-03-17 17:52:05

+1

你不需要關閉數據庫,參見[this thread](http: //stackoverflow.com/questions/4547461/closing-the-database-in-a-contentprovider)。 – Sajmon 2013-03-17 17:58:57

+1

@vmironov [文檔](https://developer.android.com/reference/android/content/ContentProvider.html#onCreate%28%29)建議確切:不應在'onCreate()中調用可能較慢的操作'。 – Sam 2013-03-17 18:03:00

回答

2

在關閉數據庫之前收集垃圾時會打印該消息。有一個關於此問題的討論很多:

Closing the database in a ContentProvider

TL;博士:不擔心。總的來說,關閉數據庫實際上會起到反作用。關閉你的交易和遊標,讓android管理數據庫。

順便說一句,小心在onCreate打開數據庫。如果使用SQLiteDatabaseHelper打開數據庫,則可能會調用onUpdate方法。在更新數據庫的過程中,沒有太多可能比讓ANR殺死你的程序更糟。

相關問題