前言
在Android
開發過程中,我們知道有四大組件:Activity
,Service
,BroadCast
以及ContentProvider
。
Activity
方面的知識我曾經也多少講解過一些,比較零散。關於它的知識主要是圍繞生命週期
和啓動模式
展開。關於Activity
的生命週期
我沒有系統講過,不過與之相關的Fragment
的生命週期我倒是講過,大家感興趣的話,可參考DialogFragment(一)——簡介來對比Activity
的生命週期
學習。
關於Activity
的啓動模式
大家可以參考以下文章:
Kotlin筆記(41) — Activity啓動模式
Service
學習的話,大家可參考:
一.Service簡介
二. "非綁定式服務"知識全解
三.快速創建"非綁定式"服務
四."綁定式"服務知識全解
五.快速創建"綁定式"服務
六.AIDL實現跨進程通訊
七.IntentService使用講解
BroadCast
學習,大家可參考:
一.BroadCast全解析
二.封裝一個廣播工具類 —— AppReceiver
三.本地廣播 — LocalBroadcastManager
四. 網絡實時監測廣播
五.App開機自啓動的實現
六.App強迫下線的實現
ok,今天就和大家來學習下內容提供器ContentProvider
的相關知識吧。
今天涉及到的知識:
- ContentProvider內容提供器包括哪些內容
- ContentProvider使用
- 最後要說的話
一.ContentProvider內容提供器包括哪些內容
我們一直說的ContentProvider是四大組件之一
,其實這裏的ContentProvider
遠不止ContentProvider
而已。它其實包括以下知識:
- ContentProvider :app內部數據提供器,用以實現不同應用間數據共享。
- ContentResolver:內容解析器,主要用於查詢,獲取手機內部聯繫人,短信等數據。
- ContentObserver:內容觀察器,一般用於監聽短信動作,如接收短信,發送短信等。
二. ContentProvider使用
ContentProvider
主要用於不同應用間跨進程數據訪問。但是ContentProvider
自身並不具備數據存儲功能,它只提供數據操作(增刪改查)的統一接口。這些接口的執行,需要一個具體的數據庫對象(Android
上一般爲Sqlite
數據庫對象)來協助完成各種數據庫操作。
說起來比較枯燥,下面舉例說明。
假如我們在一部手機上有兩個應用:A
和B
。要實現應用B
可以訪問應用A
的數據的話,則在應用A
中需要現有自己的數據庫,假設此數據的操作數據庫對象爲SQLiteDatabase db
,然後繼承ContentProvider
寫一個自己的Provider
,假設叫MyProvider
,將db
對象放到MyProvider
中,利用db
對象寫一系列的增刪改查方法。
然後在A
應用的Androidmanifast.xml
中註冊MtProvider
,類似下面這樣:
<provider
android:exported="true"
android:authorities="xxxx"
android:name=".provider.MyProvider"/>
接着在應用B
中利用ContentResolver
通過對應匹配的uri
去調用對應的進程一的contentprovider的不同的表進行增刪改查操作。
大致邏輯就是這樣了。ContentProvider
的使用已有大神做過詳細講解,這裏貼下這篇文章:
ContentProvider的簡單使用
在此,對該作者表示感謝。
三. 最後要說的話
ContentProvider
的使用場景是跨進程數據共享。適用於兩個不同應用需要數據共享的場景。但是在實際開發中,由於很多app已經十分重視自己數據的安全性,使得該功能的使用頻率不是很高。大家瞭解就好。
ok, 今天的內容就介紹到這裏了,謝謝大家。