android處理序間通訊,IBinder模型

來源:互聯網
上載者:User

       進程間傳遞類對象,比較高效的是使用Parcel;然後配合IBinder組成一個通訊模型,比之廣播更加及時高效,也更安全。
       IBinder是什麼呢?首先要明白,Android的遠程調用(就是跨進程調用)就是通過IBinder實現的,下面是對android開發文檔的翻譯。 
IBinder是遠程對象的基本介面,是為高效能而設計的輕量級遠程調用機制的核心部分。但它不僅用於遠程調用,也用於進程內調用。這個介面定義了與遠程對象互動的協議。不要直接實現這個介面,而應該從Binder派生。
IBinder的主要API是transact(),與它對應另一方法是Binder.onTransact()。第一個方法使你可以向遠端的IBinder對象發送發出調用,第二個方法使你自己的遠程對象能夠響應接收到的調用。IBinder的API都是同步執行的,比如transact()直到對方的Binder.onTransact()方法調用完成後才返回。調用發生在進程內時無疑是這樣的,而在進程間時,在IPC的協助下,也是同樣的效果。
        通過transact()發送的資料是Parcel,Parcel是一種一般的緩衝區,除了有資料外還帶有一些描述它內容的中繼資料。中繼資料用於管理IBinder對象的引用,這樣就能在緩衝區從一個進程移動到另一個進程時儲存這些引用。這樣就保證了當一個IBinder被寫入到Parcel並發送到另一個進程中,如果另一個進程把同一個IBinder的引用回傳到原來的進程,那麼這個原來的進程就能接收到發出的那個IBinder的引用。這種機制使IBinder和Binder像唯一標誌符那樣在進程間管理。
         系統為每個進程維護一個存放互動線程的線程池。這些互動線程用於派送所有從另外進程發來的IPC調用。例如:當一個IPC從進程A發到進程B,A中那個發出調用的線程(這個應該不線上程池中)就阻塞在transact()中了。進程B中的互動線程池中的一個線程接收了這個調用,它調用Binder.onTransact(),完成後用一個Parcel來做為結果返回。然後進程A中的那個等待的線程在收到返回的Parcel後得以繼續執行。實際上,另一個進程看起來就像是當前進程的一個線程,但不是當前進程建立的。
       Binder機制還支援進程間的遞迴調用。例如,進程A執行自己的IBinder的transact()調用進程B的Binder,而進程B在其Binder.onTransact()中又用transact()向進程A發起調用,那麼進程A在等待它發出的調用返回的同時,還會用Binder.onTransact()響應進程B的transact()。總之Binder造成的結果就是讓我們感覺到跨進程的調用與進程內的調用沒什麼區別。
        當操作遠程對象時,你經常需要查看它們是否有效,有三種方法可以使用: 
1 transact()方法將在IBinder所在的進程不存在時拋出RemoteException異常。 
2 如果目標進程不存在,那麼調用pingBinder()時返回false。 
3 可以用linkToDeath()方法向IBinder註冊一個IBinder.DeathRecipient,在IBinder代表的進程退出時被調用。

        要實現IBinder來支援遠程調用,應從Binder類派生一個類。Binder實現了IBinder介面。但是一般不需要直接實現此類,而是跟據你的需要由開發包中的工具產生,這個工具叫aidi。你通過aidi語言定義遠程對象的方法,然後用aidi工具產生Binder的衍生類別,然後就可使用之。然而,可是,但是,當然,你也可以直接從Binder類派生以實現自訂的RPC調用,或只是執行個體化一個原始的Binder對象直接作為進程間共用的令牌來使用。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.