中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ibinder的介紹以及查看有效性的方法

發布時間:2020-07-17 23:56:54 來源:網絡 閱讀:610 作者:neitui 欄目:網絡安全

       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相關閱讀請點擊內推資訊→www.neitui.me/zx/

  內行問答-互聯網行業經驗交流平臺→www.neitui.me/dkc/
  內推網(www.neitui.me ),專注于做互聯網招聘行業內部推薦、打造最專業的互聯網招聘內部推薦直招平臺。                


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

和平区| 博乐市| 米易县| 金昌市| 睢宁县| 固始县| 柳河县| 深泽县| 霍山县| 皮山县| 丹凤县| 江都市| 永靖县| 任丘市| 湾仔区| 容城县| 府谷县| 万年县| 绥江县| 呼图壁县| 外汇| 太湖县| 石台县| 阜宁县| 库车县| 三都| 永登县| 永福县| 乌鲁木齐市| 宜阳县| 青浦区| 许昌市| 苍山县| 漳平市| 攀枝花市| 汕尾市| 娄烦县| 江山市| 新田县| 鸡泽县| 隆林|