2011-07-14 21 views
16

要將所有,的Android的ContentProvider和谷歌IO休息通話

如果你看建設的Android REST的應用程序,他們所提出的建議在所有三個設計模式來使用內容提供商無論谷歌IO會話,如果你需要共享數據或不。

如果您查看Content Provider類文檔http://developer.android.com/reference/android/content/ContentProvider.html,他們說如果您計劃與其他應用程序共享數據,則只需要使用內容提供者。

我的應用程序不需要與其他應用程序共享任何數據,所以使用內容提供者矯枉過正?如果有的話,Google IO REST視頻爲什麼暗示它應該用於所有場景?

- = =更新 -

會談在這裏https://dl.google.com/googleio/2010/android-developing-RESTful-android-apps.pdf

+1

好問題 - 我還沒有看到這個覆蓋好,有一次想知道自己是否使用它們! –

+0

你可以發佈鏈接到談話嗎? – Blackbelt

+0

給你。 https://dl.google.com/googleio/2010/android-developing-RESTful-android-apps.pdf – Koppo

回答

16

這個問題沒有真正正確或錯誤的答案,但我強烈地在使用內容提供商陣營,原因如下。

您將爲數據獲得一個定義明確,易於使用的CRUD界面。一旦你寫了一個契約和你的提供者方法,開始檢索數據只是幾行。當你稍後來到這個項目上工作,或者你僱用了另一個開發人員時,你將在幾分鐘內加快速度。

Android框架中的許多類都是爲了與內容提供者一起工作而設計的。特別是,CursorLoaders非常出色,你需要做大量的工作來模擬自己的功能。除了編寫您自己的所有數據檢索代碼和異步任務以外,還要管理活動中的遊標生命週期。有各種細微差別和事情要照顧。這將需要

經常更新或插入行嗎?通過ContentProvider通知ListViews和其他Cursor消費者更改非常容易。如果您不使用ContentProvider,則必須編寫自己的觀察者並自行管理它。

想要集成快速搜索框,或將一些強大的過濾應用到ListView?同樣,如果你使用Cursors和ContentProvider,這很簡單,如果你不使用Cursors和ContentProvider,那麼很簡單。

如果將來您決定將數據開放給其他應用程序,那麼最終您最終還是會編寫ContentProvider。請記住,您仍然可以使用ContentProviders而不允許其他應用修改您的數據。

我可以(也可能)進一步擴展這篇文章,但希望你能明白。谷歌使用諸如iosched等優秀應用程序的提供商是有原因的。

+0

專門用於Google I/O應用程序的內容提供程序過度複雜化了大量樣板代碼。也許它看起來不錯,但這不是如何處理URI的最好例子。 –

+1

@AliakseiN。那麼最好的例子是什麼?我真的很想找到一個很好的例子來說明如何用內容提供者實現一個應用程序 – Axel

0

根據我的經驗,實現一個內容提供者可以做更多的工作,然後直接使用數據庫。谷歌可能會說應用程序應該使用內容提供商的原因之一可能是因爲他們相信擴展。實現Content Provider的應用程序可以輕鬆地將數據擴展到其他應用程序。

因爲這是一個REST的話題,另一個原因可能是因爲Google開始關注很多雲存儲想法。如果您可以實現內容提供者,則可以更改數據檢索功能,同時仍保留大量現有代碼。內容提供者通常將數據檢索功能與實際數據分開,使其更加靈活。如果您想將數據切換到雲,那麼在您的應用程序中實施Content Provider會容易得多。

在我看來,大多數應用程序並不需要查詢大量的數據,使雲存儲成爲可取的。這取決於應用程序,但我認爲如果您的數據旨在保留在內部,您可以避免使用內容提供商。