2011-10-17 67 views
1

所以我主要來自網頁背景,我正在嘗試學習android應用程序的體系結構。試圖掌握對內容提供者的正確理解。是否應該通過ContentProviders公開所有數據?

我覺得我的理解是,內容提供商都非常的活動/服務和你的數據之間的中間人(排序的DAO)。我也認爲內容提供商也提供其他應用程序訪問您的數據(幾乎像一個Web服務?)

我真的沒有得到的是,如果你不需要這些數據暴露給其他應用程序?我是否需要打擾內容提供商和所有的uri定義等?如果沒有,是否有這個...模式的名稱? (或缺乏)還是我最好只使用ContentProviders,並接受將此數據公開給其他應用程序的額外好處?

我知道最終我會想要同步的應用程序和外部數據庫之間的數據。我看到一個google IO演示文稿支持使用內容提供者進行RESTful通信的模式。但就目前而言,我只是爲了適應基本的靜態數據。然後希望將它從REST服務中的數據交換出來,一旦我得到它。

希望我沒有完全在這裏下車。謝謝。

回答

1

儘管它表示內容提供商非常適合共享內容,但它們也免費爲您提供其他一些功能!

有關內容供應商最好的事情是,該系統可以爲您處理線程問題:)當我移植我的應用程序切換到蜂窩我得到了很多數據庫錯誤的(你要知道那些無法在薑餅以前存在的話)我沒有正確處理不同線程上的訪問。

我趕緊把內容提供商對我的數據庫之上,以及..從來沒有在這方面回頭一看,它似乎更容易,一旦你設置你的內容提供商整個應用程序的其它部分的代碼更漂亮和您不必擔心併發性

+0

我認爲線程問題是Google IO推動的主要誘惑能力。你知道是否仍然可以使用ContentProvider,但保持私有性,同時仍然利用線程優勢?還是有一種替代模式可以實現這一點? – dispake

+0

是的,你簡單的設置publish =「false」,或者在清單中的東西:) – dten

1

寫在規格,和你所提到的:

內容提供商存儲和檢索數據並使其對所有應用程序進行訪問。他們是跨應用程序共享數據的唯一方式;沒有所有Android軟件包可以訪問的公共存儲區域。

因此,如果您存儲的數據不應該被其他應用程序訪問,則無需打擾ContentProviders。正如您在Android Data Storage上看到的,您可以通過多種方式存儲數據。

我的看法是,對於您的情況,對於使用REST服務以及不應與其他應用程序共享的數據,您應該使用SQLiteDatabase。你可以找到一個很好的例子SQLiteDatabase example here

相關問題