ContentProvider統一了對數據源操作的接口,並支持進程間通信(IPC),應用進程之間可以通過ContentProvider對外暴露接口,來分享數據。 作爲android中核心組件,不得不深入瞭解,翻看了android的源碼寫篇blog與大家分享。
1.我畫了一個靜態類結構圖,看下圖:
上圖中已經把ContentProvider的核心結構列舉了出來。
1.IContentProvider定義了所有可以操作數據源的接口,如:query,insert等。
2.ContentProviderNative是一個抽象類繼承自Binder,它並沒有真正實現IContentProvider接口,ContentProviderNative核心方法asInterface,這是一個static的方法負責得到ContentProviderProxy代理對象。
3.ContentProviderProxy實現了IContentProvider所有接口,並支持進程間通信(IPC),主要負責將形參打包到Parcel中通過IBinder.transact發送包並從reply parcel中得到cursor
4.Transport繼承自ContentProviderNative,並通過getIContentProvider方法返回。
我畫了一個時序圖,來說明在Activity中使用getConentResolver().query時以上對象的調用時序: