ContentProvider

部分轉載自:ConntentProvider 從入門到精通

ContentProvider的角色

ContentProvider 一般爲存儲和獲取數據提供統一的接口,可以在不同的應用程序之間共享數據。
之所以使用ContentProvider,主要有以下幾個理由:

  1. ContentProvider提供了對底層數據存儲方式的抽象。底層使用了SQLite數據庫,在用了ContentProvider封裝後,即使你把數據庫換成MongoDB,也不會對上層數據使用層代碼產生影響。

  2. Android框架中的一些類需要ContentProvider類型數據。如果你想讓你的數據可以使用在如SyncAdapter,Loader,CursorAdapter等類上,那麼你就需要爲你的數據做一層ContentProvider封裝。

  3. 第三個原因也是最主要的原因,是ContentProvider爲應用間的數據交互提供了一個安全的環境。它准許你把自己的應用數據根據需求開放給其他應用進行增、刪、改、查,而不用擔心直接開放數據庫權限而帶來的安全問題。

ContentResolver

這裏寫圖片描述

有些人可能會疑惑,爲什麼我們不直接訪問Provider,而是又在上面加了一層ContentResolver來進行對其的操作,這樣豈不是更復雜了嗎?其實不然,大家要知道一臺手機中可不是隻有一個Provider內容,它可能安裝了很多含有Provider的應用,比如聯繫人應用,日曆應用,字典應用等等。有如此多的Provider,如果你開發一款應用要使用其中多個,如果讓你去了解每個ContentProvider的不同實現,豈不是要頭都大了。所以Android爲我們提供了ContentResolver來統一管理與不同ContentProvider間的操作。

那ContentResolver是如何來區別不同的ContentProvider的呢?這就涉及到URI(Uniform Resource Identifier)問題。
ContentProvider 中的URI 有固定的格式:

  • Authority:授權信息,用以區別不同的ContentProvider;
  • Path:表名,用以區分ContentProvider中不同的數據表;
  • Id:Id號,用以區別表中的不同數據;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章