2015-08-08 162 views
6

我是新的android應用程序開發,並在學習基本的android組件時,我意圖和內容提供者之間感到困惑,因爲兩者都被用於將數據從一個應用程序/組件發送到另一個應用程序/組件。在意圖的情況下,我們可以使用捆綁或額外發送數據,爲什麼我們使用內容提供商。有人能用一個例子來解釋我嗎?

我們也可以只使用內容提供者訪問android中的數據庫,這是我們使用內容提供者的唯一原因嗎?意圖vs內容提供者在android

回答

9

兩者都被用於從一個應用/組件將數據發送到另一應用/組件

不是真的。

有四個組件中的Android:

  • Activity
  • Service
  • BroadcastReceiver
  • ContentProvider

一個Intent是無那些。 Intent涉及當我們開始一個活動,開始或綁定到一個服務,或發送廣播。然而,比較IntentContentProvider類似於將鏟與靴子進行比較,認爲兩者都可用於攜帶污物。雖然是真的,但通常一個啓動是涉及攜帶污垢,但攜帶污垢的實際手段是由別的東西,如獨輪車處理。

如果有意圖,我們可以使用捆綁或附加功能發送數據,那麼爲什麼我們要使用內容提供者。

我們經常針對不同的情況使用不同的工具。例如,你會發現在漁網中攜帶水很困難。

每個四個分量都具有不同的作用,特別是在關係到進程間通信(IPC):

  • 一種Activity驅動散裝我們的用戶界面,包括啓動從其他應用的活動(或有我們的活動之一,由其他應用程序啓動)

  • 一個Service存在邏輯上從用戶界面分離再運行的操作,包括由其他應用程序實現的服務工作(或有其他應用程序與服務合作您發佈)

  • 一個BroadcastReceiver是一個發佈/訂閱消息系統,讓你將消息發送到任意訂戶,或訂閱來自任意發件人的郵件,跨進程邊界

  • 一個ContentProvider是批量數據傳輸,無論是在一個數據庫式結構的形式(行和列)或以流的形式,特別是用於與其他應用程序的工作

也可以我們訪問數據庫I n android只使用內容提供者

否。畢竟,如果這是真的,那麼訪問數據庫將是不可能的。 A ContentProvider不會出現魔法。它必須由程序員編寫。如果ContentProvider只能通過ContentProvider訪問數據庫,那麼我們會遇到問題。

這就是我們使用內容提供商的唯一原因嗎?

否。除了提供數據庫式API之外,ContentProvider還可以發佈流。這對於獲取應用程序之間的任意數據非常重要,例如使PDF附件可用於PDF查看器的電子郵件客戶端。

+0

完美的解釋,一行一行。非常感謝:) –

+0

需要一點建議。我應該先學習什麼,內容提供者或android數據庫? –

+0

@Shivamaggarwal:都不是。或者,更準確地說,想出一個真正的問題,然後學習你需要解決的問題。例如,如果您的問題涉及獲取聯繫人數據,則需要了解如何使用「ContentProvider」,因爲這是Android爲您提供聯繫人數據的方式。 – CommonsWare

2

意圖是用於發送/接收事務性命令和數據的消息體系結構。內容提供者是存儲數據的抽象接口,用於創建,更新,刪除和同步操作。

+0

和數據庫呢? –

+0

數據庫(例如,內置在sqllite數據庫中的android)是數據的一種存儲機制。內容提供者可以使用數據庫,文件存儲或其他存儲機制。內容提供者接口允許您從應用程序或其他應用程序的其餘部分抽象出該存儲機制。 –

相關問題