Android四大組件之ContentProvider

ContentProvider是什麼

它的誕生就是爲了給不同應用提供內容訪問,自然在我們研究的“多進程通信方式”之中。
ContentProvider 封裝了數據的跨進程傳輸,我們可以直接使用 getContentResolver() 拿到 ContentResolver 進行增刪改查即可。
ContentProvider 以一個或多個表(與在關係型數據庫中的表類似)的形式將數據呈現給外部應用。 行表示提供程序收集的某種數據類型的實例,行中的每個列表示爲實例收集的每條數據。
實現一個 ContentProvider 時需要實現以下幾個方法:

onCreate():初始化 provider
query():查詢數據
insert():插入數據到 provider
update():更新 provider 的數據
delete():刪除 provider 中的數據
getType():返回 provider 中的數據的 MIME 類型
注意:
1. onCreate() 默認執行在主線程,別做耗時操作,query() 也最好異步執行
2. 上面的 4 個增刪改查操作都可能會被多個線程併發訪問,因此需要注意線程安全

ContentResolver是什麼

ContentResolver意思是內容解析者,當需要對ContentProvider中的數據進行添加、刪除、修改和查詢操作時,就可以使用ContentResolver類來完成,通過Context對象中的getContentResolver()方法獲取該類的實例

URI是什麼,標準格式是什麼

內容 URI 統一的形式就是:

content://authority/path

例如:

content://user_dictionary/words

當你調用 ContentResolver 方法來訪問 ContentProvider 中的表時,需要傳遞要操作表的 URI。
在通過 ContentResolver 進行數據請求時(比如 contentResolver.insert(uri, contentValues);), 系統會檢查指定 URI 的 authority 信息,然後將請求傳遞給註冊監聽這個 authority 的 ContentProvider 。這個 ContentProvider 可以監聽 URI 想要操作的內容,Android 中爲我們提供了 UriMatcher 來解析 URI。

UriMatcher是什麼

Uri代表了要操作的ContentProvider,那我們怎麼解析Uri,並從Uri中獲取數據呢。Android系統給我們提供了兩個用於操作Uri的工具類,分別爲UriMatcher和ContentUris
UriMatcher本質是一個文本過濾器,使用UriMatcher就可以輕鬆實現匹配URI的功能,UriMatcher中提供了一個addURI()方法,第一個參數是就是主機名”content://com.example.ContentTest”,第二個參數是路徑,第三個參數是匹配碼

uriMatcher.addURI("content://com.example.ContentTest", "student", 1);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章