Android 使用AIDL實(shí)現(xiàn)守護(hù)進(jìn)程

參考資料
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2016/0418/4158.html
http://blog.csdn.net/coding_glacier/article/details/7520199 底層實(shí)現(xiàn)

一宴凉、AIDL的理解

AIDL:Android Interface Definition Language,即Android接口定義語言普舆,這是一種用于Android的跨進(jìn)程通信(IPC)的工具恬口。
在android中一個(gè)進(jìn)程不允許直接訪問另一個(gè)進(jìn)程的內(nèi)存的,也就是說不能訪問另一個(gè)進(jìn)程中的應(yīng)用奔害。在android中允許有多進(jìn)程楷兽,因此多進(jìn)程通信可以在自己的應(yīng)用中進(jìn)行通信地熄,也可以在不同應(yīng)用中通信华临,而這便是AIDL的使用方向。但是AIDL有個(gè)缺點(diǎn)端考,那就是比較耗資源雅潭。
使用aidl進(jìn)行通信,通常有服務(wù)端和客戶端的概念

二却特、如何使用AIDL

1.首先要在main目錄下建立一個(gè)aidl文件夾

Paste_Image.png

2.在aidl文件夾下創(chuàng)建一個(gè)aidl文件

Paste_Image.png
Paste_Image.png

3.模擬一個(gè)服務(wù)端扶供,使用:服務(wù)名稱 的方式創(chuàng)建一個(gè)服務(wù)

Paste_Image.png

4.遠(yuǎn)程服務(wù)負(fù)責(zé)創(chuàng)建aidl接口

1.在遠(yuǎn)程服務(wù)中,創(chuàng)建Binder對(duì)象裂明。使用Stub()方法創(chuàng)建

Paste_Image.png

2.在onBind中返回該對(duì)象

Paste_Image.png

5.客戶端接入
1.將服務(wù)端保存AIDL文件的包名原封不動(dòng)的復(fù)制,并且在client的AIDL文件夾下建立相同的包椿浓,并考入AIDL文件
(包名必須要相同,可以將包原封不動(dòng)的拷貝到客戶端)
2.使用bind啟動(dòng)的方式綁定遠(yuǎn)程服務(wù),和遠(yuǎn)程服務(wù)建立關(guān)系

Intent serviceIntent = new Intent(); 
//通過包名顯示的啟動(dòng)一個(gè)Service 第一個(gè)參數(shù)為app的包名 第二個(gè)為app中Service的全路徑
 serviceIntent.setComponent(new ComponentName("com.tjpld.aidlservicetest", "com.tjpld.aidlservicetest.AppService"));
bindService(intent, mConnection, Context.BIND_AUTO_CREATE);

3.ServiceConnection中客戶端創(chuàng)建aidl對(duì)象

Paste_Image.png

4.客戶端調(diào)用aidl中定義好的方法,向服務(wù)端寫入值
加入我們?cè)赼idl中定義的方法是:setData(String data)扳碍,那么在使用時(shí):

Paste_Image.png

進(jìn)程包活(灰色碧岵恚活+守護(hù)進(jìn)程)

灰色保活:它是利用系統(tǒng)的漏洞來啟動(dòng)一個(gè)前臺(tái)的Service進(jìn)程笋敞,與普通的啟動(dòng)方式區(qū)別在于碱蒙,它不會(huì)在系統(tǒng)通知欄處出現(xiàn)一個(gè)Notification,看起來就如同運(yùn)行著一個(gè)后臺(tái)Service進(jìn)程一樣夯巷。這樣做帶來的好處就是赛惩,用戶無法察覺到你運(yùn)行著一個(gè)前臺(tái)進(jìn)程(因?yàn)榭床坏絅otification),但你的進(jìn)程優(yōu)先級(jí)又是高于普通后臺(tái)進(jìn)程的(因?yàn)閷?shí)際上他是通過startForeground開啟的一個(gè)前臺(tái)進(jìn)程)。

Paste_Image.png

大于18的時(shí)候


Paste_Image.png

雙守護(hù)進(jìn)程
1.思路就是兩個(gè)進(jìn)程的服務(wù)互相監(jiān)聽趁餐,當(dāng)一個(gè)服務(wù)啟動(dòng)后喷兼,立即啟動(dòng)和綁定另一個(gè)服務(wù),并且互相監(jiān)聽后雷,當(dāng)其中一個(gè)發(fā)現(xiàn)另一個(gè)服務(wù)斷開時(shí)褒搔,立即啟動(dòng)斷開的服務(wù)并且重新綁定。

假設(shè)有兩個(gè)服務(wù):LocalService,RemoteServcie
在LocalService中:
(1)啟動(dòng)時(shí)立即綁定遠(yuǎn)程服務(wù):

Paste_Image.png

(2)監(jiān)聽遠(yuǎn)程服務(wù):

Paste_Image.png

在RemoteService中同樣:

Paste_Image.png
Paste_Image.png

低層實(shí)現(xiàn)

總結(jié)了鏈接文章中的內(nèi)容
1.Binder機(jī)制:client-server的通信結(jié)構(gòu)。client在請(qǐng)求和server通信時(shí),首先會(huì)去差serviceManager中是否有這個(gè)service踪栋,有的話service通過bind-driver提供一份對(duì)應(yīng)service的代理纱扭,client不會(huì)直接操作server的方法 而是通過操作server對(duì)應(yīng)的代理對(duì)象,代理對(duì)對(duì)象有和server一樣的方法燎字。client向server發(fā)送數(shù)據(jù)時(shí)打包成parcel包,交給bind-driver。每個(gè)server都由serviceManage管理念逞,注冊(cè)在serviceMananger中。serviceManager會(huì)不斷查詢bind-driver中是否有數(shù)據(jù)發(fā)給指定的service边翁。client端向service發(fā)送數(shù)據(jù)時(shí)會(huì)bpbinder對(duì)象翎承,調(diào)用它的onTrance方法向binddriver里寫入數(shù)據(jù),service在會(huì)有一個(gè)bnbinder調(diào)用onTrancact方法解包數(shù)據(jù)符匾,調(diào)用service對(duì)應(yīng)的方法叨咖。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市啊胶,隨后出現(xiàn)的幾起案子甸各,更是在濱河造成了極大的恐慌,老刑警劉巖焰坪,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件趣倾,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡某饰,警方通過查閱死者的電腦和手機(jī)儒恋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門善绎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人诫尽,你說我怎么就攤上這事涂邀。” “怎么了箱锐?”我有些...
    開封第一講書人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵比勉,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我驹止,道長(zhǎng)浩聋,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任臊恋,我火速辦了婚禮衣洁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘抖仅。我一直安慰自己坊夫,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開白布撤卢。 她就那樣靜靜地躺著环凿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪放吩。 梳的紋絲不亂的頭發(fā)上智听,一...
    開封第一講書人閱讀 49,760評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音渡紫,去河邊找鬼到推。 笑死,一個(gè)胖子當(dāng)著我的面吹牛惕澎,可吹牛的內(nèi)容都是我干的莉测。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼唧喉,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼捣卤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起欣喧,我...
    開封第一講書人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤腌零,失蹤者是張志新(化名)和其女友劉穎梯找,沒想到半個(gè)月后唆阿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡锈锤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年驯鳖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了闲询。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡浅辙,死狀恐怖扭弧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情记舆,我是刑警寧澤鸽捻,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站泽腮,受9級(jí)特大地震影響御蒲,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜诊赊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一厚满、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧碧磅,春花似錦碘箍、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至秆撮,卻和暖如春多艇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背像吻。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工峻黍, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人拨匆。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓姆涩,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親惭每。 傳聞我的和親對(duì)象是個(gè)殘疾皇子骨饿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)台腥,斷路器宏赘,智...
    卡卡羅2017閱讀 134,628評(píng)論 18 139
  • Jianwei's blog 首頁 分類 關(guān)于 歸檔 標(biāo)簽 巧用Android多進(jìn)程,微信黎侈,微博等主流App都在用...
    justCode_閱讀 5,904評(píng)論 1 23
  • 原文:http://weishu.me/2016/01/12/binder-index-for-newer/ 要點(diǎn)...
    指尖流逝的青春閱讀 2,606評(píng)論 0 13
  • 十周年同學(xué)會(huì)察署,回逛郁郁蔥蔥的校園,走到半路老同學(xué)D突然說當(dāng)年自己太不成熟峻汉,與我們室友幾個(gè)爭(zhēng)吵贴汪,搬離寢室脐往,從小到大一...
    alisa思思閱讀 478評(píng)論 0 1
  • 終于等到你业簿,還好我沒放棄... 耳邊一直環(huán)繞著這句歌詞,生怕生命中會(huì)缺失掉一種刻骨銘心的經(jīng)歷阳懂。 01 成長(zhǎng)的過程很...
    愛學(xué)愛踐行的十四閱讀 256評(píng)論 0 0