面試題:有使用過ContentProvider碼?能說說Android為什么要設計ContentProvider這個組件嗎弦叶?
ContentProvider應用程序間非常通用的共享數據的一種方式俊犯,也是Android官方推薦的方式。Android中許多系統應用都使用該方式實現數據共享伤哺,比如通訊錄燕侠、短信等。但我遇到很多做Android開發(fā)的人都不怎么使用它立莉,覺得直接讀取數據庫會更簡單方便绢彤。
設計用意在于:
1、封裝蜓耻,對數據進行封裝茫舶,提供統一的接口,使用者完全不必關心這些數據是在DB刹淌,XML饶氏、Preferences或者網絡請求來的。當項目需求要改變數據來源時有勾,使用我們的地方完全不需要修改疹启。
2、提供一種跨進程數據共享的方式
應用程序間的數據共享還有另外的一個重要話題蔼卡,就是數據更新通知機制了喊崖。因為數據是在多個應用程序中共享的,當其中一個應用程序改變了這些共享數據的時候雇逞,它有責任通知其它應用程序荤懂,讓它們知道共享數據被修改了,這樣它們就可以作相應的處理塘砸。
ContentResolver接口的notifyChange函數來通知那些注冊了監(jiān)控特定URI的ContentObserver對象节仿,使得它們可以相應地執(zhí)行一些處理。ContentObserver可以通過registerContentObserver進行注冊掉蔬。