binder是什么?可以理解為Andorid系統(tǒng)中的一種進(jìn)程間通信的方式,雖然Android系統(tǒng)基于Linux,但是它并沒有采用Linux自帶的進(jìn)程間通信方式,而是采用了更高效的binder,理解binder對于理解Android系統(tǒng)具有至關(guān)重要的作用。binder原理圖如下:
Binder通信采用c/s架構(gòu),和Socket一樣,但是稍微復(fù)雜。binder組件包含Client、Server、ServiceManager以及binder驅(qū)動,其中ServiceManager用于管理系統(tǒng)中的各種服務(wù)。
具體通信過程:Server先向ServiceManager注冊一個服務(wù),其實(shí)也就是一個字符串。然后Client從ServiceManager獲取服務(wù),關(guān)鍵字就是注冊的字符串。這樣Client和Server就可以通信。真正的數(shù)據(jù)流是走了底層的Linux內(nèi)核空間的binder驅(qū)動,但這個是被封裝的,所以不用關(guān)心真正的binder驅(qū)動,只管在Client和Server之間調(diào)用函數(shù)收發(fā)數(shù)據(jù)就行。就是服務(wù)端的onTransact函數(shù)和客戶端remote()-》transact(TEST,data, &reply),發(fā)送的數(shù)據(jù)存在data中,返回的數(shù)據(jù)存在reply中。Client和Server都可以收發(fā)數(shù)據(jù)。
安卓系統(tǒng)架構(gòu)圖:
理解了binder以后,具體分析:binder驅(qū)動肯定是在最下面的Linux內(nèi)核中,那么binder的客戶端和服務(wù)器,可以存在在任何地方。舉例:
1、bindder服務(wù)器在app層,客戶端在app層。2、bindder服務(wù)器在native層,客戶端在app層。3、bindder服務(wù)器在app層,客戶端在native層。4、bindder服務(wù)器在native層,客戶端在native層。
以上四種情況都可以。
說的比較抽象,我發(fā)兩篇文章連接,這兩篇文章的代碼我已經(jīng)驗(yàn)證過,可以使用。需要注意的是,APP層的binder由java語言編寫,native層的binder,由C++語言編寫。但其實(shí)接口都很相似。
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報(bào)投訴
相關(guān)推薦
汽車電子中控系統(tǒng)
學(xué)習(xí)電子
發(fā)布于 :2022年11月20日 15:15:49
汽車電子中控系統(tǒng)
學(xué)習(xí)電子
發(fā)布于 :2022年11月20日 15:16:47
數(shù)據(jù)處理模塊(5)Android的Sqlite數(shù)據(jù)庫以及Sqlite數(shù)據(jù)的使用(6)Andorid的定位系統(tǒng)(7)Andorid的數(shù)據(jù)恢復(fù)系統(tǒng)(8)支持了圖片模和文字模式源碼目錄定位團(tuán)
發(fā)表于 07-15 16:44
服務(wù)框架的層次結(jié)構(gòu) 34810.1.2 java服務(wù)框架中各個類間的相互作用 35110.2 運(yùn)行機(jī)制 35410.2.1 java服務(wù)框架初始化 35510.2.2 binder 35510.2.3
發(fā)表于 09-26 09:47
Binder驅(qū)動中對應(yīng)的Binder實(shí)體的Binder引用的描述。 }; void*cookie; // 當(dāng)type=BINDER_TYPE_BIN
發(fā)表于 03-30 09:26
在移植openharmony過程中,由于添加了新組件,啟動后,一直打印binder驅(qū)動程序報(bào)錯,錯誤如下所示。01-01 00:00:45.218 1 1 E 00719/Init
發(fā)表于 05-23 17:27
1、WifiStateMachine死鎖導(dǎo)致Binder Thread超限觸發(fā)Watchdog重啟 系統(tǒng)信息:問題發(fā)生的系統(tǒng)是Android P,跑壓測復(fù)現(xiàn)到,復(fù)現(xiàn)過兩次,目前看起來是google
發(fā)表于 10-19 18:00
你好
我用的是imx8mm andorid10,gps是ttymxc2,cat是可以的。
evk_8mm:/ # 貓 /dev/ttymxc2
$BDGSV
發(fā)表于 04-25 07:31
ARM成立ANDORID解決方案中心
ARM公司宣布設(shè)立Android解決方案中心,該中心為設(shè)計(jì)和開發(fā)基于ARM技術(shù)的、并且運(yùn)行在Android(源自O(shè)pen Handset Alliance™的開源平臺)平臺的人
發(fā)表于 11-18 09:18
?774次閱讀
本內(nèi)容介紹了Andorid在平板電腦中的應(yīng)用,詳細(xì)介紹了Andorid再結(jié)構(gòu)及功能和平板電腦的發(fā)展及技術(shù)方面知識
發(fā)表于 07-18 10:26
?221次下載
Ramdump:把系統(tǒng)memory中某一個時間點(diǎn)的數(shù)據(jù)信息保存起來的內(nèi)存崩潰文件,屬于ELF文件格式。 當(dāng)系統(tǒng)發(fā)生致命錯誤無法恢復(fù)的時候,主動觸發(fā)抓取ramdump能異常現(xiàn)場保留下來,這是屬于高級調(diào)試秘籍。
發(fā)表于 05-21 17:52
?7118次閱讀
今天谷歌也是早早就發(fā)布了Andorid系統(tǒng)的新補(bǔ)丁,這是11月份的安全補(bǔ)丁,用來修復(fù)近期曝光的安全漏洞同時還帶來了面向Android 10的BUG修復(fù)和后臺優(yōu)化。
發(fā)表于 11-05 15:16
?2676次閱讀
德國賓德BINDER電池測試箱適用于對鋰離子電池和模塊進(jìn)行測試。在和鋰離子電池打交道的時候,可能存在各種危險(xiǎn)。系統(tǒng)操作員需要對風(fēng)險(xiǎn)進(jìn)行評估,并通過合適的安全方案來應(yīng)對風(fēng)險(xiǎn)。德國BINDER賓德鋰電池
發(fā)表于 09-27 17:35
?1960次閱讀
Andorid 系統(tǒng)是在嵌入式行業(yè)中廣泛應(yīng)用的系統(tǒng),手機(jī)、平板、機(jī)器人、汽車中控系統(tǒng)都有使用安卓系統(tǒng)
發(fā)表于 10-07 14:58
?633次閱讀
部分APP不會使用常規(guī)的framework api調(diào)用系統(tǒng)的一些函數(shù)獲取信息,但是如果他自己構(gòu)建binder調(diào)用的信息獲取,最后都會跑到這個函數(shù)中去。
發(fā)表于 11-27 09:40
?866次閱讀
評論