Android進程間通信(2):ContentProvider

ContentProvider是Android中提供的專門用于不同應(yīng)用間進行數(shù)據(jù)共享的方式,從這里看他天生就適合進程間通信鹉究。ContentProvider底層也是通過Binder實現(xiàn)進程間通信,不過使用起來要比AIDL要簡單,因為系統(tǒng)已經(jīng)為我們進行了封裝,我們不需要考慮到底層關(guān)系就可以實現(xiàn)IPC赌结。

ContentProvider使用:

首先先創(chuàng)建一個自定義的ContentProvider,如BookProvider繼承ContentProvider,其中有6個方法需要重寫onCreate(),undate(),delete(),query(),insert(),getType()扩淀。其中onCreate()是代表ContentProvider的創(chuàng)建。getType(Uri uri)需要傳入一個Uri,返回Uri所對應(yīng)的MIME類型博脑。undate(),delete(),query(),insert(),這個四個方法都是對數(shù)據(jù)庫的操作方法增刪改查票罐。這六個方法中叉趣,除了onCreate()是運行在主線程中,其他的五個方法都是由外界回調(diào)并且運行到Binder線程池中该押。

ContentProvider主要是以表格形式來組織數(shù)據(jù)疗杉,并且可以包含多個表,對于每個表蚕礼,他們都具有行和列的層次性烟具,行對應(yīng)著一條記錄,列對應(yīng)的一個屬性奠蹬,和數(shù)據(jù)庫類似朝聋。同時他也支持文件數(shù)據(jù),如圖片囤躁,視頻等冀痕。文件數(shù)據(jù)和表格數(shù)據(jù)不同,因此處理這類數(shù)據(jù)是可以在ContentProvider中返回文件的句柄給外界從而讓文件訪問ContentProvider中的文件信息狸演。

BookProvider創(chuàng)建完成后言蛇,我們在去配置XML文件,其中android:authorities是ContentProvider的唯一標識宵距,通過這個我們可以訪問到ContentProvider腊尚,所以這個要是唯一的,建議在定義的時候加上包名满哪。如果需要跨進程還需要聲明“com.ryg.PROVIDER”權(quán)限婿斥。

注冊完成后劝篷,我們就可以訪問了,只是這里面沒有東西受扳。

現(xiàn)在我們添加一些數(shù)據(jù)携龟,需要一個數(shù)據(jù)庫管理兔跌,我們創(chuàng)建一個DpOpenHelper繼承SQLiteOpenHelper勘高,然后創(chuàng)建幾個常量:如數(shù)據(jù)庫名字:public static final String DB_NAME = "book_provider_db" 表名:public static final ?String BOOK_TABLE_NAME = "book" 創(chuàng)建表語句:public static final String CREATE_TABLE_BOOK = "create table " + BOOK_TABLE_NAME + "(_id INTEGER PRIMARY KEY ," + "name TEXT)" 然后再OnCreate() 執(zhí)行創(chuàng)表語言就可以了。

然后我們就可以通過ContentProvider對表中的數(shù)據(jù)進行增刪改查了坟桅。ContentProvider通過URI來區(qū)分外界要訪問的數(shù)據(jù)集合华望,所以我們要對特定的表定義特定的URI和URI_CODE,通過UriMatcher.addURI的方法將URI和URI_CODE關(guān)聯(lián)到一起如:對于這個book表格,

public static final String AUTHRITY = "com.example.book.provider";//這個是唯一標識和XML里面authrities一樣仅乓。

public static final Uri BOOK_CONTENT_URI = Uri.parse("content://" + AUTHRITY + "/book");//book表格的URI

public static fianl int BOOK_URI_CODE = 1;//book表格的code

private static final UriMatcher ?uriMatcher= new UriMatcher(UriMatcher.NO_MATCH);//創(chuàng)建UriMatcher

static{ uriMatcher.addURI(AUTHRITY,"book",BOOK_URI_CODE); //將URI和code關(guān)聯(lián)到一起赖舟。

}

通過URI獲取數(shù)據(jù)庫的表名

然后將undate() insert() query() delete() 這幾個方法完善,通過這四個方法操作數(shù)據(jù)庫夸楣。不過要注意的是insert() delete() undate() 這三個方法會導致數(shù)據(jù)庫里面數(shù)據(jù)發(fā)生改變宾抓,我們需要通過ContentResolver的notifychange方法通知外界當前的ContentProvider已經(jīng)發(fā)生改變。


通知更新
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末豫喧,一起剝皮案震驚了整個濱河市石洗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌紧显,老刑警劉巖讲衫,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異孵班,居然都是意外死亡涉兽,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門篙程,熙熙樓的掌柜王于貴愁眉苦臉地迎上來枷畏,“玉大人,你說我怎么就攤上這事虱饿∮倒睿” “怎么了?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵郭厌,是天一觀的道長袋倔。 經(jīng)常有香客問我,道長折柠,這世上最難降的妖魔是什么宾娜? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮扇售,結(jié)果婚禮上前塔,老公的妹妹穿的比我還像新娘嚣艇。我一直安慰自己,他們只是感情好华弓,可當我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布食零。 她就那樣靜靜地躺著,像睡著了一般寂屏。 火紅的嫁衣襯著肌膚如雪贰谣。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天迁霎,我揣著相機與錄音吱抚,去河邊找鬼。 笑死考廉,一個胖子當著我的面吹牛秘豹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播昌粤,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼既绕,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了涮坐?” 一聲冷哼從身側(cè)響起凄贩,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎膊升,沒想到半個月后怎炊,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡廓译,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年评肆,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片非区。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡瓜挽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出征绸,到底是詐尸還是另有隱情久橙,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布管怠,位于F島的核電站淆衷,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏渤弛。R本人自食惡果不足惜祝拯,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧佳头,春花似錦鹰贵、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至亭珍,卻和暖如春敷钾,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背块蚌。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工闰非, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留膘格,地道東北人峭范。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像瘪贱,于是被迫代替她去往敵國和親纱控。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理菜秦,服務(wù)發(fā)現(xiàn)甜害,斷路器,智...
    卡卡羅2017閱讀 134,628評論 18 139
  • Content Provider:內(nèi)容提供者 應(yīng)用程序間共享數(shù)據(jù)的一種方式 為存儲和獲取數(shù)據(jù)提供了統(tǒng)一的接口 An...
    關(guān)kwan閱讀 331評論 0 3
  • 一球昨、 什么是IPC尔店? IPC,全稱Inter-Process Communication主慰,字面意思就是進程間通信或...
    kuwork閱讀 7,950評論 0 8
  • 前言 ContentProvider 是 android 提供的專門用于不同應(yīng)用之間進行數(shù)據(jù)共享的方式嚣州。其內(nèi)部也是...
    jacky123閱讀 591評論 0 2
  • 參考: 內(nèi)容提供程序基礎(chǔ)知識 創(chuàng)建內(nèi)容提供程序 一. 用途: 跨程序共享數(shù)據(jù)(為其他應(yīng)用程序提供訪問數(shù)據(jù)的接口) ...
    NickelFox閱讀 1,102評論 2 13