IBinder是遠(yuǎn)程對象的基本接口,是為高性能而設(shè)計的輕量級遠(yuǎn)程調(diào)用機(jī)制的核心部分。但它不僅用于遠(yuǎn)程調(diào)用,也用于進(jìn)程內(nèi)調(diào)用。這個接口定義了與遠(yuǎn)程對象交互的協(xié)議。不要直接實現(xiàn)這個接口,而應(yīng)該從Binder派生。
IBinder的 主要API是transact(),與它對應(yīng)另一方法是Binder.onTransact()。第一個方法使你可以向遠(yuǎn)端的IBinder對象發(fā)送發(fā)出 調(diào)用,第二個方法使你自己的遠(yuǎn)程對象能夠響應(yīng)接收到的調(diào)用。IBinder的API都是同步執(zhí)行的,比如transact()直到對方的 Binder.onTransact()方法調(diào)用完成后才返回。調(diào)用發(fā)生在進(jìn)程內(nèi)時無疑是這樣的,而在進(jìn)程間時,在IPC的幫助下,也是同樣的效果。
通過transact()發(fā)送的數(shù)據(jù)是Parcel,Parcel是一種一般的緩沖區(qū),除了有數(shù)據(jù)外還帶有一些描述它內(nèi)容的元數(shù)據(jù)。元數(shù)據(jù)用于管理 IBinder對象的引用,這樣就能在緩沖區(qū)從一個進(jìn)程移動到另一個進(jìn)程時保存這些引用。這樣就保證了當(dāng)一個IBinder被寫入到Parcel并發(fā)送到 另一個進(jìn)程中,如果另一個進(jìn)程把同一個IBinder的引用回發(fā)到原來的進(jìn)程,那么這個原來的進(jìn)程就能接收到發(fā)出的那個IBinder的引用。這種機(jī)制使 IBinder和Binder像唯一標(biāo)志符那樣在進(jìn)程間管理。
系統(tǒng)為每個進(jìn)程維護(hù)一個存放交互線程的線程池。這些交互線程用于派送所有 從另外進(jìn)程發(fā)來的IPC調(diào)用。例如:當(dāng)一個IPC從進(jìn)程A發(fā)到進(jìn)程B,A中那個發(fā)出調(diào)用的線程(這個應(yīng)該不在線程池中)就阻塞在transact()中 了。進(jìn)程B中的交互線程池中的一個線程接收了這個調(diào)用,它調(diào)用Binder.onTransact(),完成后用一個Parcel來做為結(jié)果返回。然后進(jìn) 程A中的那個等待的線程在收到返回的Parcel后得以繼續(xù)執(zhí)行。實際上,另一個進(jìn)程看起來就像是當(dāng)前進(jìn)程的一個線程,但不是當(dāng)前進(jìn)程創(chuàng)建的。
Binder機(jī)制還支持進(jìn)程間的遞歸調(diào)用。例如,進(jìn)程A執(zhí)行自己的IBinder的transact()調(diào)用進(jìn)程B的Binder,而進(jìn)程B在其 Binder.onTransact()中又用transact()向進(jìn)程A發(fā)起調(diào)用,那么進(jìn)程A在等待它發(fā)出的調(diào)用返回的同時,還會用 Binder.onTransact()響應(yīng)進(jìn)程B的transact()??傊瓸inder造成的結(jié)果就是讓我們感覺到跨進(jìn)程的調(diào)用與進(jìn)程內(nèi)的調(diào)用沒什 么區(qū)別。
當(dāng)操作遠(yuǎn)程對象時,你經(jīng)常需要查看它們是否有效,有三種方法可以使用:
1 transact()方法將在IBinder所在的進(jìn)程不存在時拋出RemoteException異常。
2 如果目標(biāo)進(jìn)程不存在,那么調(diào)用pingBinder()時返回false。
3 可以用linkToDeath()方法向IBinder注冊一個IBinder.DeathRecipient,在IBinder代表的進(jìn)程退出時被調(diào)用。
更多ibinder相關(guān)閱讀請點擊內(nèi)推資訊→www.neitui.me/zx/
內(nèi)行問答-互聯(lián)網(wǎng)行業(yè)經(jīng)驗交流平臺→www.neitui.me/dkc/
內(nèi)推網(wǎng)(www.neitui.me ),專注于做互聯(lián)網(wǎng)招聘行業(yè)內(nèi)部推薦、打造最專業(yè)的互聯(lián)網(wǎng)招聘內(nèi)部推薦直招平臺。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
文章標(biāo)題:ibinder的介紹以及查看有效性的方法-創(chuàng)新互聯(lián)
URL標(biāo)題:http://www.rwnh.cn/article2/cejeoc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、網(wǎng)站改版、品牌網(wǎng)站建設(shè)、定制開發(fā)、網(wǎng)站制作、App設(shè)計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容