日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android进程间通信(IPC)机制Binder简要介绍和学习计划

發布時間:2025/3/15 Android 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android进程间通信(IPC)机制Binder简要介绍和学习计划 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在Android系統中,每一個應用程序都是由一些Activity和Service組成的,這些Activity和Service有可能運行在同一個進程中,也有可能運行在不同的進程中。那么,不在同一個進程的Activity或者Service是如何通信的呢?這就是本文中要介紹的Binder進程間通信機制了。

?? ? ? ?我們知道,Android系統是基于Linux內核的,而Linux內核繼承和兼容了豐富的Unix系統進程間通信(IPC)機制。有傳統的管道(Pipe)、信號(Signal)和跟蹤(Trace),這三項通信手段只能用于父進程與子進程之間,或者兄弟進程之間;后來又增加了命令管道(Named Pipe),使得進程間通信不再局限于父子進程或者兄弟進程之間;為了更好地支持商業應用中的事務處理,在AT&T的Unix系統V中,又增加了三種稱為“System V IPC”的進程間通信機制,分別是報文隊列(Message)、共享內存(Share Memory)和信號量(Semaphore);后來BSD Unix對“System V IPC”機制進行了重要的擴充,提供了一種稱為插口(Socket)的進程間通信機制。若想進一步詳細了解這些進程間通信機制,建議參考Android學習啟動篇一文中提到《Linux內核源代碼情景分析》一書。

?? ? ? ?但是,Android系統沒有采用上述提到的各種進程間通信機制,而是采用Binder機制,難道是因為考慮到了移動設備硬件性能較差、內存較低的特點?不得而知。Binder其實也不是Android提出來的一套新的進程間通信機制,它是基于OpenBinder來實現的。OpenBinder最先是由Be Inc.開發的,接著Palm Inc.也跟著使用。現在OpenBinder的作者Dianne Hackborn就是在Google工作,負責Android平臺的開發工作。

?? ? ? ?前面一再提到,Binder是一種進程間通信機制,它是一種類似于COM和CORBA分布式組件架構,通俗一點,其實是提供遠程過程調用(RPC)功能。從英文字面上意思看,Binder具有粘結劑的意思,那么它把什么東西粘結在一起呢?在Android系統的Binder機制中,由一系統組件組成,分別是Client、Server、Service Manager和Binder驅動程序,其中Client、Server和Service Manager運行在用戶空間,Binder驅動程序運行內核空間。Binder就是一種把這四個組件粘合在一起的粘結劑了,其中,核心組件便是Binder驅動程序了,Service Manager提供了輔助管理的功能,Client和Server正是在Binder驅動和Service Manager提供的基礎設施上,進行Client-Server之間的通信。Service Manager和Binder驅動已經在Android平臺中實現好,開發者只要按照規范實現自己的Client和Server組件就可以了。說起來簡單,做起難,對初學者來說,Android系統的Binder機制是最難理解的了,而Binder機制無論從系統開發還是應用開發的角度來看,都是Android系統中最重要的組成,因此,很有必要深入了解Binder的工作方式。要深入了解Binder的工作方式,最好的方式莫過于是閱讀Binder相關的源代碼了,Linux的鼻祖Linus Torvalds曾經曰過一句名言RTFSC:Read The Fucking Source Code。

?? ? ? ?雖說閱讀Binder的源代碼是學習Binder機制的最好的方式,但是也絕不能打無準備之仗,因為Binder的相關源代碼是比較枯燥無味而且比較難以理解的,如果能夠輔予一些理論知識,那就更好了。閑話少說,網上關于Binder機制的資料還是不少的,這里就不想再詳細寫一遍了,強烈推薦下面兩篇文章:

?? ? ? ?Android深入淺出之Binder機制

?? ? ? ?Android Binder設計與實現 – 設計篇

?? ? ? ?Android深入淺出之Binder機制一文從情景出發,深入地介紹了Binder在用戶空間的三個組件Client、Server和Service Manager的相互關系,Android Binder設計與實現一文則是詳細地介紹了內核空間的Binder驅動程序的數據結構和設計原理。非常感謝這兩位作者給我們帶來這么好的Binder學習資料。總結一下,Android系統Binder機制中的四個組件Client、Server、Service Manager和Binder驅動程序的關系如下圖所示:

?? ? ? ?

?? ? ? ?1. Client、Server和Service Manager實現在用戶空間中,Binder驅動程序實現在內核空間中

?? ? ? ?2. Binder驅動程序和Service Manager在Android平臺中已經實現,開發者只需要在用戶空間實現自己的Client和Server

?? ? ? ?3. Binder驅動程序提供設備文件/dev/binder與用戶空間交互,Client、Server和Service Manager通過open和ioctl文件操作函數與Binder驅動程序進行通信

?? ? ? ?4. Client和Server之間的進程間通信通過Binder驅動程序間接實現

?? ? ? ?5. Service Manager是一個守護進程,用來管理Server,并向Client提供查詢Server接口的能力

?? ? ? ?至此,對Binder機制總算是有了一個感性的認識,但仍然感到不能很好地從上到下貫穿整個IPC通信過程,于是,打算通過下面四個情景來分析Binder源代碼,以進一步理解Binder機制:

?? ? ? ?1.?Service Manager是如何成為一個守護進程的?即Service Manager是如何告知Binder驅動程序它是Binder機制的上下文管理者。

?? ? ? ?2.?Server和Client是如何獲得Service Manager接口的?即defaultServiceManager接口是如何實現的。

?? ? ? ?3.?Server是如何把自己的服務啟動起來的?Service Manager在Server啟動的過程中是如何為Server提供服務的?即IServiceManager::addService接口是如何實現的。

?? ? ? ?4 ?Service Manager是如何為Client提供服務的?即IServiceManager::getService接口是如何實現的。

?? ? ? ?在接下來的四篇文章中,將按照這四個情景來分析Binder源代碼,都將會涉及到用戶空間到內核空間的Binder相關源代碼。這里為什么沒有Client和Server是如何進行進程間通信的情景呢? 這是因為Service Manager在作為守護進程的同時,它也充當Server角色。因此,只要我們能夠理解第三和第四個情景,也就理解了Binder機制中Client和Server是如何通過Binder驅動程序進行進程間通信的了。

?? ? ? ?為了方便描述Android系統進程間通信Binder機制的原理和實現,在接下來的四篇文章中,我們都是基于C/C++語言來介紹Binder機制的實現的,但是,我們在Android系統開發應用程序時,都是基于Java語言的,因此,我們會在最后一篇文章中,詳細介紹Android系統進程間通信Binder機制在應用程序框架層的Java接口實現:

?? ? ? ?5.?Android系統進程間通信Binder機制在應用程序框架層的Java接口源代碼分析。

老羅的新浪微博:http://weibo.com/shengyangluo,歡迎關注!

183
9

我的同類文章

Android(175)
  • ?Chromium擴展(Extension)的頁面(Page)加載過程分析2016-09-19閱讀967
  • ?Chromium擴展(Extension)機制簡要介紹和學習計劃2016-09-05閱讀14606
  • ?Chromium為視頻標簽<video>渲染視頻畫面的過程分析2016-08-22閱讀2328
  • ?Chromium視頻標簽<video>簡要介紹和學習計劃2016-08-08閱讀2510
  • ?Chromium網頁滑動和捏合手勢處理過程分析2016-07-11閱讀5373
  • ?Chromium網頁輸入事件處理機制簡要介紹和學習計劃2016-06-27閱讀5352
  • ?Chromium擴展(Extension)加載過程分析2016-09-12閱讀3707
  • ?Chromium為視頻標簽<video>全屏播放的過程分析2016-08-29閱讀2486
  • ?Chromium為視頻標簽<video>創建播放器的過程分析2016-08-15閱讀6431
  • ?Chromium分發輸入事件給WebKit處理的過程分析2016-07-25閱讀3490
  • ?Chromium網頁輸入事件捕捉和手勢檢測過程分析2016-07-04閱讀7027
更多文章

參考知識庫

猜你在找
Android移植基礎
話說linux內核-uboot和系統移植第14部分
CentOS7 Linux系統管理實戰視頻課程
紅帽Linux系統企業內部實訓
嵌入式Linux系統移植入門
Android進程間通信IPC機制Binder簡要介紹和學習計劃
Android進程間通信IPC機制Binder簡要介紹和學習計劃
Android進程間通信IPC機制Binder簡要介紹和學習計劃
Android進程間通信IPC機制Binder簡要介紹和學習計劃
Android進程間通信IPC機制Binder簡要介紹和學習計劃
查看評論 66樓?devwang_com?2016-08-29 19:32發表?[回復]
棒棒棒~
65樓?novas-meng?2016-05-12 07:54發表?[回復]
羅老師,信號(Signal)這個不光對父子進程有效吧
64樓?oTingFengXiYu?2016-05-09 14:50發表?[回復]
太高深了,完全看不懂,也沒看到想要的答案,最后進程跟進程間是如何實現通信的例子呢,這個倒像是一個學術報告。就好比經濟學家可以把商品的價格體現這種問題能分析出十幾頁,但是說白了用物以稀為貴就能說明白的問題了。代碼呢,到底是怎么實現的,我們可以在代碼里面根據自己想要的答案繼續深究下去,而不是一籮筐的吧里面鋼筋水泥全露出來,最后你告訴我鋼筋水泥都在這了,混一下糊上去就行了。。。。 Re:?羅升陽?2016-05-09 17:52發表?[回復]
回復oTingFengXiYu:別噴了,省點力氣,先把這個系列的文章看完了再說,要例子去找書看。 Re:?sandy84n?2016-06-08 17:25發表?[回復]
回復Luoshengyang:對于這種人,老羅不必太在意
63樓?衛星是我朋友?2016-03-29 17:02發表?[回復]
羅大哥,佩服~學android就要有你這樣的精神!
62樓?杭州山不高?2016-03-25 18:31發表?[回復]
看過,頂過!
61樓?feng_zhi_chao?2015-10-17 21:25發表?[回復]
謝謝樓主,好文章啊!
60樓?小白james?2015-09-22 17:06發表?[回復]
新手,完全看不懂啊,老羅,請問如何學習研究android源碼 Re:?Traxer?2015-12-27 16:41發表?[回復]
回復u011747761:從博主的第一篇文章開始邊看邊分析吧,文章都寫的很詳細的,分析完幾篇會好一些了
59樓?real的IT之路?2015-06-05 22:20發表?[回復]
羅老師的分析太高深了,以至于有些地方根本看不懂。要同時具備c++ java 還有linux操作系統內核的知識,同時掌握的人很少的,同時也是比較牛的人。
58樓?ziyang3721?2015-03-06 17:02發表?[回復]
binder_mmap 會分配內核虛擬地址空間,這塊一般只有100多M, 而基本上每個進程都會 mmap 1M,是不是說明只能同時允許 100個左右的進程?
57樓?qw345?2015-01-20 19:09發表?[回復]
已投票,期待更多精彩文章
56樓?wlbstc?2015-01-04 14:39發表?[回復]
學習到很多,樓主太好了。 已經投票“博客之星”
55樓?hefeipeng1993?2014-12-18 10:47發表?[回復]
LZ你好,我只是剛接觸Framework層的學習,菜鳥一枚,有一點不明,就是Binder對于Android Framework的意義何在?愿賜教! Re:?羅升陽?2014-12-20 01:34發表?[回復]
回復hefeipeng1993:意義很大,無時無刻都在用,等你慢慢深入學習framework就會體會到的了。
54樓?小熊先生kisCode?2014-12-01 18:44發表?[回復]
羅老師,qq群5還沒加滿,但是不允許你任何加入了..請問下還有其他可以加入的QQ群嗎
53樓?liuyanggofurther?2014-09-08 21:29發表?[回復]
第二段第三行是命名管道喲 (命令管道 Named Pipe)
52樓?XHunterX?2014-08-18 09:39發表?[回復]
感謝博主的付出,向你這樣的IT人致敬!
51樓?Dingo妹?2014-07-24 12:17發表?[回復]
雖然還是不懂,但是文章思路和講解很清晰,謝謝樓主。
50樓?Dingo妹?2014-07-24 12:07發表?[回復]
http://blog.csdn.net/universus/article/details/6211589/ 《Android Binder設計與實現 - 設計篇》可以用這個鏈接
49樓?舊舊?2014-07-20 23:03發表?[回復]
好文章啊,應該早點看到的~~感謝樓主
48樓?floatingclouds?2014-06-05 20:24發表?[回復]
Binder機制詳解系列:
Binder 機制詳解—Binder IPC 程序結構:http://www.cloudchou.com/android/post-497.html
Binder 機制詳解—Binder 系統架構: http://www.cloudchou.com/android/post-507.html
本地Binder框架通信原理: http://www.cloudchou.com/android/post-534.html
Binder 機制詳解—Binder 本地框架: http://www.cloudchou.com/android/post-547.html
Binder 機制詳解—Binder Java框架: http://www.cloudchou.com/android/post-558.html
Java層Binder框架通信原理: http://www.cloudchou.com/android/post-573.html
47樓?floatingclouds?2014-06-05 14:02發表?[回復]
我博客也寫了一些Binder的博客,從入門到詳解的資料,請樓主賜教。
這些入門資料都有詳細的代碼分析,也有托管在github上的demo源碼下載。
Binder service入門–創建native binder service: http://www.cloudchou.com/android/post-332.html
Binder service入門—Framework binder service: http://www.cloudchou.com/android/post-447.html
Binder service入門—應用層binder service: http://www.cloudchou.com/android/post-458.html
Binder service入門—框架層、應用層調用native binder service: http://www.cloudchou.com/android/post-468.html
46樓?a2758963?2014-02-09 09:28發表?[回復]
每一個應用程序都是由一些Activity和Service組成的,一般Service運行在獨立的進程中
--------------------------------------------------------------------------------下面是官方文檔的說明,請博主確認:
A service runs in the main thread of its hosting process—the service does not create its own thread and does not run in a separate process (unless you specify otherwise). Re:?羅升陽?2014-02-09 22:48發表?[回復]
回復a2758963:三年前的文章了,很久都時間梳理一下Service默認的確是運行在同一個進程里面,但是在AndroidManifest.xml可以將它們配置運行在獨立的進程里面。已經修改過來了。
45樓?chishuideyu?2014-01-23 14:47發表?[回復]
太棒了,謝謝樓主,絕對收藏,寫的真好,就需要這個,哈哈哈
44樓?漫游的民工?2014-01-04 17:19發表?[回復]
不得不佩服樓主很強大,受教了!
43樓?lymallen?2013-12-26 15:42發表?[回復]
這一系列的文章都很好,全面分析了android的進程間通信,很不錯,多謝分享。
42樓?zhaoshenan?2013-12-09 22:28發表?[回復]
很好的文章,非常感謝羅老師分享,雖然有很多地方不懂
41樓?programmer_lxg?2013-11-05 10:38發表?[回復]
好得很
40樓?liuleiblog?2013-09-18 10:58發表?[回復]
問下羅老師,您閱讀系統源碼用什么工具啊?
39樓?sence?2013-09-10 14:40發表?[回復]
很好的文章,非常感謝樓主分享
38樓?sxq315?2013-09-09 21:21發表?[回復]
不錯,收藏下
37樓?曉之不難?2013-08-29 13:08發表?[回復]
貌似還不錯
36樓?chenxiaogang_324?2013-05-29 17:43發表?[回復]
羅老師:有個問題想請教你一下。每個進程都有很多線程在和binder驅動通信。當兩個進程利用binder通信的時候利用的是哪個線程呢?為何這么多線程在和binder通信,但是代碼中卻始終看不到線程同步。比如在一個應用程序中啟動一個activity,這個會和activitymanagerservice進行binder通信來啟動。activitymanagerservice有自己的線程。systemserver中有很多讀取binder驅動的線程。假設其中一個binder線程接收到了這個通信,它要在activitymanagerservice中history增加一個activityrecord對象。這個時候如果其他的應用程序也要啟動一個一個activity,利用的是另外一個binde線程。這個時候找到的最頂端的activity究竟是哪個呢?這個問題困擾了我很久了,希望您能解答一下。 Re:?羅升陽?2013-05-29 18:25發表?[回復]
回復chenxiaogang_324:ActivityManagerService明顯是有做線程同步
35樓?Sky_River?2013-05-20 15:38發表?[回復]
不好意思,可能我沒講清楚吧,我的意思是想知道在驅動中怎么樣引用到binder_node這個結構,在binder_transaction_data中的target.ptr指向的是什么樣的數據結構?我想知道的是binder實體在內核中的存在形式,不是binder對象。您能否指教下?
34樓?Sky_River?2013-05-17 09:40發表?[回復]
老羅,你好!看了這篇http://disanji.net/2011/02/28/android-bnder-design/,里邊不斷提到內核中的Binder實體與用戶空間的Binder實體,在binder_transaction_data結構中有一個target域,如果是在接收方,文章里說target.ptr就是Binder對象的內存指針,我想問下這個指針具體指的是哪個數據結構?是binder_node結構么? Re:?羅升陽?2013-05-17 10:21發表?[回復]
回復Sky_River:這些概念確實是很容易混淆,為了方便理解,我在《Android系統源代碼情景分析》一書中對它們進行了區別:
1. 在用戶空間,運行在Server端的稱為Binder本地對象,運行在Client端的稱為Binder代理對象。
2. 在內核空間,Binder實體對象用來描述Binder本地對象,Binder引用對象用來描述Binder代理對象。
3. 上述四種對象都統稱為Binder對象。
關于這四種對象的作用和關系,《Android系統源代碼情景分析》一書講得很詳細,博客也有講,但是沒有那么詳細,這里我也很難用幾句話就說清楚。
33樓?jia1015512573?2013-05-15 21:05發表?[回復]
羅哥你好,看完了這一系列的文章,受益匪淺,只是還有一個地方沒有搞明白,客戶端通過向ServiceManager查詢,得到查詢服務的結果后,是如何對binder接口進行改動的呢,因為剛開始建立的bpBInder綁定的是handle為0的ServiceManager,后來怎么又通過這個binder向Service發送數據了呢,還有就是ServiceManager管理的究竟是服務的什么東西,是服務的handle值嗎?也就是ServiceManager返回給客戶端的是Service的什么東西?希望羅哥指點小弟一番 Re:?羅升陽?2013-05-15 23:19發表?[回復]
回復jia1015512573:你不是一個地方沒明白,是四個地方沒明白了,呵呵,說明你看完了,但是還沒理解,那四個問題都是很基本的問題。
32樓?red5613?2013-05-13 10:08發表?[回復]
學習中。。。。
31樓?red5613?2013-05-10 18:48發表?[回復]
收獲中。
30樓?rickystudio?2013-05-09 15:46發表?[回復]
羅老師,中間的圖是用什么工具畫的? Re:?羅升陽?2013-05-09 17:10發表?[回復]
回復rickystudio:word
29樓?demonshir?2013-04-27 21:11發表?[回復]
老羅你好,
看你書上對binder傳遞的數據分析挺詳細的,但我還有疑問。
關于Client 獲得實名Binder的引用,會向servicemanager發送請求數據,smgr從發送的數據中取出<名字>+<引用>然后查找列表。
書上逐層的分析到了flat_binder_object這個變量,想問下這個<名字>是保存哪個變量或哪個地址空間? ptr.buffer?
比如wifi Service,在變量里是否就存儲wifiService這個字符串?
看了一些資料,但是一直沒有把這個細節搞明白,還請指點。 Re:?羅升陽?2013-04-27 23:08發表?[回復]
回復demonshir:是的,保存在ptr.buffer里面。最開始的時候,這個字符串通過Parcel保存在一個binder_transaction_data的ptr.buffer里面,這個ptr.buffer是位于Client端的地址空間的,經過Binder驅動的時候,就會拷貝到Server端的地址空間去。在你說的情況下,這個Server端就是ServiceManager。ServiceManager將接收到的數據保存在一個binder_txn里面。binder_txn和binder_transaction_data的結構是一樣的,也就是說,binder_txn里面的data就保存了你說的字符串。接著ServiceManager再通過一個binder_io來從binder_txn.data里面將那個字符串取出來。取出這個字符串之后,就可以得到一個對應的binder引用。這個binder引用經過Binder驅動返回給Client端的時候,又會被轉換成Client端的一個binder引用。 Re:?羅升陽?2013-04-27 23:13發表?[回復]
回復Luoshengyang:ServiceManager不像其它的Service/Client一樣,用Parcel來序列化和反序列化通信數據,也沒有直接用binder_transaction_data來表示通信數據,它用的是binder_txn和binder_io,也就是說,binder_txn相當于binder_transaction_data,binder_io相當于Parcel,注意一下這個點,就會比較清楚數據的流向了。
28樓?qiuxiaolong007?2013-04-10 16:48發表?[回復]
老羅,你好!

由于種種原因,(客戶要求),我們做了一個非常蛋疼的項目,是Qt for Android, 大部分困難基本克服,還有一項問題,我想請問你一下,請耐心看看哈~

簡而言之,我們需要把一些進程間通訊的操作 封裝在 /system/lib/myso.so中,這樣用Binder機制是不是可行呢?

在linux下,項目通過共享內存實現的,現在向android下移植,遇到了困難,請提供一下思路,我對android不是很熟悉。謝謝 Re:?羅升陽?2013-04-10 18:01發表?[回復]
回復qiuxiaolong007:可以的啊,Binder機制本身就是封裝在一個so里面給上層使用的。
27樓?edmond999?2013-03-08 17:32發表?[回復]
hello,老羅,想問下binder驅動會主動請求添加新的binder線程去處理事物,這是真的么? Re:?羅升陽?2013-03-09 17:32發表?[回復]
回復edmond999:會的,不過進程可以設置Binder驅動最多可以請求創建的Binder線程的數量,這個值默認是16.
Re:?edmond999?2013-03-08 17:39發表?[回復]
回復edmond999:第一,看了android Messanger的實現,怎么感覺也能夠用binder實體對象的句柄創建proxy呢?這樣子行的通么?
第二,Messanger好像既能處理同一個進程之間傳遞message,也能跨進程傳遞Message,是嗎?如果第一個問題成立,那么第二個問題也就解決了。
下面這兩個個鏈接講解了一個Messanger的例子,既能進程內,也可以跨進程,呵呵,能否解答下上邊兩個問題?
http://wenku.baidu.com/view/0a396802eff9aef8941e0617.html
http://wenku.baidu.com/view/c2946a3e87c24028915fc313.html Re:?羅升陽?2013-03-09 17:34發表?[回復]
回復edmond999:1. Binder Proxy本來就是簡單地對一個Binder實體的句柄進行封裝。
2. 同一個進程的不同線程也可以使用Binder機制,不過這時候是直接調用,不用經過Binder驅動,因為Binder驅動會對這種情況進行優化。 Re:?edmond999?2013-03-11 11:38發表?[回復]
回復Luoshengyang:謝謝,仔細研究了一下,確實不同過binder驅動,在生成一個proxy時是用binder實體對象指針進行生成的,而不是生成一個BpXXX類型的對象,如下代碼所示。所以proxy在調用transact時是直接調用的BBinder的transact,然后調用實體binder對象的onTransact函數,從而直接調用了service端的實現函數,對于是否跨多線程還是同一線程都是可以的,android的設計確實牛哇,老羅確實也很牛哇,哈哈~~~
status_t unflatten_binder(const sp<ProcessState>& proc,?
const Parcel& in, sp<IBinder>* out)?
{?
const flat_binder_object* flat = in.readObject(false);?

if (flat) {?
switch (flat->type) {?
case BINDER_TYPE_BINDER:?
*out = static_cast<IBinder*>(flat->cookie);?
return finish_unflatten_binder(NULL, *flat, in);?
case BINDER_TYPE_HANDLE:?
*out = proc->getStrongProxyForHandle(flat->handle);?
return finish_unflatten_binder(?
static_cast<BpBinder*>(out->get()), *flat, in);?
}?
}?
return BAD_TYPE;?
} Re:?edmond999?2013-03-12 16:07發表?[回復]
回復edmond999:寫錯了,生成BpXXX時使用的是本進程內的binder實體對象的指針,呵呵,筆誤。如果binder實體對象在其他進程內的話就使用驅動里binder_ref結構體的uint32_t desc成員,也就是binder的引用句柄。
26樓?sada09?2013-03-07 09:38發表?[回復]
受益匪淺
25樓?BadPattern?2013-03-05 09:23發表?[回復]
問一個問題,java層調用service的遠程接口,雙方都持有一個相同的aidl文件,編譯的時候會根據這個aidl文件生成一些相同的類來維持通信接口的約定。

那么native層的server和client擁有的共同通信接口是不是frameworks/base/include/binder下邊的一堆頭文件?通過Binder通信的都要include這些頭文件? Re:?羅升陽?2013-03-05 10:01發表?[回復]
回復dr8737010:frameworks/base/include/binder和frameworks/base/libs/binder這兩個目錄是Android系統提供的Binder庫,無論是Java層的Client/Service,還是C++層的Client/Service,最終都是通過這個庫提供的接口來完成Binder進程間通信的。這個Binder庫只是對Binder驅動的封裝而已,你也可以完全不使用它來執行Binder進程間通信,不過這樣的話,你就要大費周章地寫很多代碼了。Android系統的Service Manager的實現就沒有使用Binder庫,具體可以看這篇文章:http://blog.csdn.net/luoshengyang/article/details/6621566
24樓?pfgmylove?2012-11-29 16:32發表?[回復]
你好,android的binder不是rpc機制嗎? Re:?羅升陽?2012-11-29 17:09發表?[回復]
回復pfgmylove:IPC機制
23樓?lidongelf?2012-11-14 16:22發表?[回復]
87 +v5
22樓?stevenhu_223?2012-08-16 19:05發表?[回復]
頂!!!
21樓?huangzhenyu1983?2012-07-16 11:37發表?[回復]
android上的rpc是同步的還是異步的? Re:?羅升陽?2012-07-16 15:15發表?[回復]
回復huangzhenyu1983:可以是同步的,也可以是異步的。
20樓?Fendouliuhao?2012-07-15 09:34發表?[回復]
學習
19樓?ynb1687?2012-06-04 14:07發表?[回復]
學習了
18樓?YUMOMO_L?2012-04-24 16:14發表?[回復]
表示支持~
17樓?jifengyu_ok?2012-04-19 20:05發表?[回復]
樓主太牛了,太感謝樓主了
16樓?jindegegesun?2012-03-16 11:29發表?[回復]
樓主文章太霸道了,頂啊!
15樓?后知后覺?2012-02-29 09:50發表?[回復]
樓主很牛
14樓?wqhjfree?2012-02-09 11:26發表?[回復]
寫的很詳細, 對深入研究android有很大幫主, 頂起
13樓?kevinhe0472?2012-02-03 16:06發表?[回復]
支持樓主的每一篇文章!
12樓?無枝可依?2012-01-31 16:09發表?[回復]
樓主,建議你出書。

現在市面上介紹android系統結構的書幾乎沒有,就算有,也是掛羊頭賣狗肉。 跟你寫的差遠了
11樓?androidboy365?2011-11-23 10:51發表?[回復]
寫的不錯,分析的很清晰啊,轉載收錄了
10樓?小姚丹?2011-11-20 00:19發表?[回復]
業余得太專業了!!我最近開始學android,非常感謝您的文章
9樓?Gongqingshuai?2011-11-15 15:59發表?[回復]
冒昧的問一下,樓主現在從事android哪方面的工作啊?研究andorid多久了呢?看您對android知之甚深,所以就想了解一下。 Re:?羅升陽?2011-11-15 22:46發表?[回復]
回復Gongqingshuai:業余研究 Re:?wqhjfree?2012-02-09 11:27發表?[回復]
回復Luoshengyang:業余研究都能這么專業
8樓?winerluo?2011-11-03 18:58發表?[回復]
山窮水盡儗無路,柳暗花明又一村。
7樓?wantianpei?2011-09-19 14:17發表?[回復]
頂.
6樓?dulaiduqu?2011-09-05 08:43發表?[回復]
service不是運行在獨立的進程中吧,SDK中有這樣一句話:A service runs in the main thread of its hosting process—the service does not create its own thread and does not run in a separate process (unless you specify otherwise). Re:?羅升陽?2011-09-05 10:16發表?[回復]
回復dulaiduqu:不過怎么理解Android中的進程,可能大家的想法會有點偏差,因為Android系統是基于Linux內核的,在Linux內核里面,沒有線程的概念,都是稱為進程或者任務,所以我這里說的進程,有時候也可以理解為線程,它和啟動它的應用程序進程是共享代碼的。
Re:?羅升陽?2011-09-05 10:10發表?[回復]
回復dulaiduqu:Service一般是運行在獨立的進程中,當然也可以和其它Activity運行在同一個進程中,取決于這個Service在AndroidManifest.xml文件的配置以及調用什么函數來啟動它,典型的Activity管理服務ActivityManagerService和Package管理服務PackageManagerService就是運行在獨立的進程,因為Service是沒有UI的,所以把它放在獨立的進程中來運行,做一些計算型邏輯更合理,詳細你可以參考后面一篇文章《Android系統在新進程中啟動自定義服務過程(startService)的原理分析》,接下來還會有一篇文章是描述在進程內部啟動Service的,有興趣的話可以關注一下。
5樓?lpboss?2011-09-02 10:03發表?[回復]
樓主你好,剛剛開始學習android,我想請教一下,servicemanager打開binder時,后面都會把binder映射到共享內存中如:
bs->fd = open("/dev/binder", O_RDWR);
if (bs->fd < 0) {
LOGE("binder: cannot open device (%s)\n",
strerror(errno));
goto fail_open;
}

bs->mapsize = mapsize;
bs->mapped = mmap(NULL, mapsize, PROT_READ, MAP_PRIVATE, bs->fd, 0);
兩端都有映射,但我沒有看到有哪個在使用這段共享內存的~弄得很暈。求賜教!! Re:?羅升陽?2011-09-02 11:28發表?[回復]
回復lpboss:如果仔細閱讀一下博客后面兩篇文章《淺談Service Manager成為Android進程間通信(IPC)機制Binder守護進程之路》和《Android系統進程間通信(IPC)機制Binder中的Server啟動過程源代碼分析》,對這個問題就會比較清楚了
4樓?kennyirene?2011-08-30 15:52發表?[回復]
學習了
3樓?black_berry?2011-07-20 22:09發表?[回復]
很好,轉了。辛苦了
2樓?doumiwang?2011-07-20 14:54發表?[回復]
說的非常好,如果不同的應用程序,雖然用了相同的數字證書簽名,但是沒有放在同一個進程里運行,那么他們之間還能互相訪問數據嗎?還能訪問另一個程序的代碼嗎?可以看看這個鏈接,幫助解答一下,謝謝!http://doumiw.com/market/community/t!showTopic.do?topicId=24 Re:?羅升陽?2011-07-20 15:26發表?[回復]
回復doumiwang:以什么方來來訪問數據、訪問代碼?這個說得太抽象了,最好還是自己寫代碼來實踐一下。
還有,Android的Binder機制跟數字簽名沒有關系。
1樓?mci2004?2011-07-20 10:28發表?[回復]
SF
LZ你寫的太好了,我們很是佩服,我們公司也是搞Android的你的文章被我們幾個新進的應屆生爭相追逐,希望LZ能盡早更新!

PS:LZ身體要緊啊!2點多了還在更新文章....... Re:?羅升陽?2011-07-20 15:27發表?[回復]
回復mci2004:感謝關注

原文地址:?http://blog.csdn.net/luoshengyang/article/details/6618363

總結

以上是生活随笔為你收集整理的Android进程间通信(IPC)机制Binder简要介绍和学习计划的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 超碰人人99 | 精品福利三区3d卡通动漫 | 白白色免费视频 | 欧美激情五月 | 人妻一区二区三区四区五区 | 亚洲精品视频在线看 | 欧美一区三区 | 欧美aaa级 | 五月激情在线观看 | 欧美在线观看一区二区 | 欧美激情一区二区三级高清视频 | 桃色在线视频 | 四虎视频国产精品免费 | 深夜福利影院 | 兔费看少妇性l交大片免费 日韩高清不卡 | 老师张开让我了一夜av | 国产av不卡一区二区 | 中文字字幕在线中文乱码电影 | 黄色动漫在线免费观看 | 黄页在线播放 | 老司机深夜福利在线观看 | 欧美国产视频 | 日本久久一级片 | 亚洲最大福利网站 | 岛国片在线播放 | 亚洲第一黄 | 午夜寂寞影院在线观看 | 五月天精品在线 | 三浦惠理子aⅴ一二三区 | 日本αv | 懂色av蜜臀av粉嫩av分享吧 | 欧美精品人妻一区二区 | 欧美综合视频在线观看 | 国产精品一区二区在线观看 | 成人性生交大片免费看 | 91国产网站 | 久久精品国产99国产精品 | 三级艳丽杨钰莹三级 | 欧美高清一区 | 亚洲一区二区色图 | 欧美精品日韩在线 | 羞羞涩 | 日韩精品一区二区三区高清免费 | 性高湖久久久久久久久aaaaa | 中文字幕精品久久久久人妻红杏1 | 日本一区二区免费在线 | 韩国无码一区二区三区精品 | 黄色午夜视频 | 欧美亚洲国产一区 | 国产露脸91国语对白 | 人人妻人人澡人人爽人人dvd | 成人激情小说网站 | 国产伦精品一区二区三区免.费 | 国产一级特黄视频 | 成人做爰视频www | 国产精品毛片久久久久久久av | 日韩精品一区二区三区四区五区 | 国产午夜精品一区二区 | 国产精品午夜在线观看 | 97免费人妻无码视频 | 黄色小视频在线 | 免费 成 人 黄 色 | 在线看片日韩 | www.sesehu| 国产亚洲制服欧洲高清一区 | 欧美视频在线免费 | 色免费看 | 色丁香综合| 日韩av在线播放一区 | 毛茸茸毛片 | 成人av电影免费观看 | 91精品人妻一区二区三区蜜桃欧美 | 波多野吉衣一区 | 久久五月婷 | 美国免费高清电影在线观看 | 男人天堂资源 | 国产三级在线观看完整版 | 国产欧美日韩在线观看 | 黄网站在线观看 | 天天碰免费视频 | 日韩在线视频观看免费 | 黄色片视频免费观看 | 国产精品视频久久久久久 | 成人动漫在线观看视频 | 色婷婷一区二区 | 超碰一区二区 | 射死你天天日 | av在线有码 | 少妇一级淫片免费放中国 | 中文字幕一区二区三区精华液 | 一区久久久 | 色久综合 | 另类天堂av | 射婷婷 | 亚洲精品视频观看 | 精品乱码一区内射人妻无码 | 成人精品久久久午夜福利 | 狠狠躁日日躁夜夜躁 | 日本黄色动态图 |