我對這個問題有點困惑,如果最好使用ContentProvider
或Database
。或者,如果我不想與其他應用程序共享任何數據,則不會有任何區別。Android。內容提供者或數據庫?
如果我的理解正確,那麼基於SQLite
DB的內容提供者也有可能它們的內容僅對我的應用程序可訪問。
你能給一些解釋嗎?
非常感謝你,
穆爾
我對這個問題有點困惑,如果最好使用ContentProvider
或Database
。或者,如果我不想與其他應用程序共享任何數據,則不會有任何區別。Android。內容提供者或數據庫?
如果我的理解正確,那麼基於SQLite
DB的內容提供者也有可能它們的內容僅對我的應用程序可訪問。
你能給一些解釋嗎?
非常感謝你,
穆爾
提供商是一個解決方案,特別是跨應用程序數據發佈的確存在有價值的問題。例如,您需要使用內容提供商向快速搜索框提供搜索建議。
但是,對於應用程序內的內部使用,我不是粉絲。成本超過了恕我直言的好處(例如,靈活性降低,額外開銷)。
如果你實現一個內容提供商,請記住,他們都可以訪問其他應用程序默認。您需要在<provider>
元素中包含android:exported="false"
以使它們對您的應用程序保密。
超過一年的時間,你的思想泡沫中仍然存在問題嗎? – JohnnyLambada 2012-01-04 19:28:03
@JohnnyLambada:是的。在這點上,我比我寫這個答案時更加中立,但我仍然不會在應用程序內部使用內容提供者。 – CommonsWare 2012-01-04 19:38:34
@CommonsWare:內容提供商很容易訪問.....我應該喜歡在應用程序內部使用 – 2012-05-08 11:46:54
使用內容提供商會給你一個更加模塊化的設計,使您的生活更容易,如果你在未來的某個時刻想伸手從其他數據應用。 如果您確定只有一個應用程序需要數據,那麼您最好直接在數據庫上操作。
有一個特定的SQLite限制,你應該知道的,那就是SQLite只是單用戶。這實際上意味着你需要防止你的數據庫被同時從多個線程訪問。這在內容提供者中通常不是問題,因爲他們幾乎總是有單線程實現。
所以如果我不這麼認爲,我的應用程序中的數據應該與其他應用程序共享,那麼最好使用SQLite?!我也讀過這個話題http:// stackoverflow。com/questions/1379200/android-content-provider-database-leak-issue這意味着,使用contentproviders有一些問題。嗯...... – Tima 2010-11-22 10:23:23
那麼,在這兩種情況下都會使用SQLite,並且您提到的線程中出現的問題非常相似。 對於內容提供者,您可能被強制爲一個用戶場景,但如果您只是習慣於從一個專用工作線程執行數據庫訪問,則很容易避免出現該問題。 但是,最明顯的好處(以及我認爲唯一值得付出的努力)是數據庫和使用它的應用程序存在於不同的進程中。 – Robert 2010-11-22 15:29:12
使用內容提供商的原因是here。
總結:
可能重複的[如何決定直接訪問數據庫和內容提供商嗎?](http://stackoverflow.com/questions/7027647/how-to-decide -between-direct-database-access-and-content-provider) – 2014-01-08 15:04:15
[何時使用Content Provider]的可能重複(http://stackoverflow.com/questions/4936712/when-to-use-a-content-提供者) – davidcesarino 2014-01-09 03:50:32