在Android系統中,Content Provider作為應用程序四大組件之一,它起到在應用程序之間共享數據的作用,同時,它還是標準的數據訪問介面。前面的一系列文章已經分析過Android應用程序的其它三大組件(Activity、Service和Broadcast Receiver)了,本文將簡要介紹Content Provider組件在Android應用程序設計中的地位,為進一步學習打好基礎。
我們知道,在Android系統上,每一個應用程序都有一個獨立的用戶ID。為什麼要給每一個應用程序分配一個獨立的用戶ID呢?這是為了保護各個應用程序的數據不被其它應用程序惡意破壞而設計的。Android系統是基於Linux內核來開發的,而在Linux系統中,每一個文件除了文件本身的數據之外,還具有一定的屬性,其中最重要的就是文件許可權了。所謂的文件許可權,就是指對文件的讀、寫和執行許可權。此外,Linux還是一個多用戶的操作系統,因此,Linux將系統中的每一個文件都與一個用戶以及用戶組關聯起來,基於不同的用戶而賦予不同的文件許可權。只有當一個用戶對某個文件擁有相應的許可權時,才能執行相應的操作,例如,只有當一個用戶對某個文件擁有讀許可權時,這個用戶才可以調用read系統調用來讀取這個文件的內容。Android系統繼承了Linux系統管理文件的方法,為每一個應用程序分配一個獨立的用戶ID和用戶組ID,而由這個應用程序創建出來的數據文件就賦予相應的用戶以及用戶組讀寫的許可權,其餘用戶則無權對該文件進行讀寫。
如果我們通過adb shell命令連上模擬器,切換到/data/data目錄下,就可以看到很多以應用程序包(package)命名的文件夾,這些文件夾裡面存放的就是各個應用程序的數據文件,例如,如果我們進入到Android系統日曆應用程序數據目錄com.android.providers.calendar下的databases文件中,會看到一個用來保存日曆數據的資料庫文件calendar.db,它的許可權設置如下所示: