2013-10-09 124 views
4

我對Android開發相當陌生,但是在包裝內容提供者方面遇到困難,特別是爲單應用單數據庫SQLite數據源創建一個優點(如果有的話)有什麼好處。我可以看到,如果我想使用同步適配器,我需要一個內容提供程序,但老實說,Sync API是如此的不堪重負,以至於我認爲使用REST來滾動我自己的遠程同步過程沒有任何優勢。本地SQLite數據庫的Android內容提供者:爲什麼?

我也看到,通過在我的SQLite數據庫上實現一個Content Provider,我得到了一個有保證的Android管理的單身人士,但我使用的AndroidAnnotations可以爲我做單身管理,我已經讀過,即使我正確地管理我的打開的連接,甚至還必須建議使用單身DB輔助器。

我錯過了什麼嗎?內容提供者API似乎令人驚訝的是對於單個數據庫應用程序而言是低級且容易出錯的。特別是「手動」管理URI映射並引入奇怪的抽象層看起來不會增加太多價值。

那麼內容提供商對本地SQLite數據庫有價值嗎?如果是這樣,是否有一些框架可以爲我生成我的URI映射,還是嚴格推出自己的映射?

回答

6

首先,Sync API不僅僅是從服務器加載數據。它控制批量同步更新與整個系統中的其他應用程序同步,在運行前確保連接,並優化整個系統的電池續航時間(如running Sync Adapters periodicallytransferring data using sync adapters guide中所述)。其次,使用內容提供程序可以非常輕鬆地利用Loaders框架(可在支持庫中獲得)和CursorLoader,它們允許您的UI在內容提供者中隨着數據更改而自動更新。這可以大大減少整個活動所需的樣板量。

如果內容提供者本身的樣板是一個問題,那麼您肯定可以使用Annotation框架(如ProviGen)爲您自動生成絕大多數的內容提供者。

也有Android的一些功能,可以與內容提供商的幫助,包括custom search suggestions和共享應用的私人文件到其他應用程序(雖然擴展ContentProvider的助手FileProvider類是大多數你做'需要那個)。

用戶界面測試可以變得更容易,您也可以使用提供的MockContentProvider來模擬特定的數據集,而無需更改您的活動代碼(假設它僅從Content Provider中加載數據)。

+0

非常有用的答案,並沒有意識到自定義搜索建議需要CP的,謝謝! ProviGen看起來也會有用。我是否正確地看到我也想使用Content Provider支持的適配器作爲自動完成的數據源?我將處理一個自動完成功能,它至少有10k個可能的值,全部在我的數據庫中。 – jkraybill

+0

@jkraybill - yep。 [CursorAdapter](http://developer.android.com/reference/android/widget/CursorAdapter.html)完全符合'CursorLoader' - 你的'onLoadFinished(遊標數據)'可以調用'mAdapter.swapCursor(data) '刷新適配器的數據。 – ianhanniballake

相關問題