安卓高手之路之java層Binder

很多人一提到Binder就說代理模式,人云亦云的多,能理解精髓的少。?本篇文章就從設計角度分析一下java層BInder的設計目標,以及設計思路,設計缺陷,從而駕馭它。

???? 對于【邦德兒】的理解, 從通信的角度來看,就是一種通信方式而已,與socket沒有任何區別。客戶端transact,服務端onTransact.? 但是,從【邦德兒】本身來說,如果客戶端和服務端在一個進程,那么再通過底層驅動去把數據轉過去就顯得多余了。基于這種理論,設計的時候,如果客戶端和服務端在一個進程就直接函數調用,而不再通過驅動。對于調用者來說,他只需要得到一個接口用來transact。并不愿意知道具體的通信細節。也就是說,不關心是否是通過【邦德兒】驅動來傳輸的,還是直接在同進程通過函數的調用傳輸的。調用者確實不愿意關心,調用者不愿意關心的,那么被調用者就得關心,不然代碼誰來寫。所以【邦德兒】本身必須要處理這兩種情況:

??????? 1.在同一個進程。這個對應的是Binder。

??????? 2.不在同一個進程。這個對應的是BInderProxy。

??? 對于調用者來說,這兩個東西都實現了IBinder接口中的transact函數。BInderProxy通過底層驅動,把數據傳輸到服務端而BInder則直接通過內部調用轉給onTransact處理。

??? 附注:

在這里吐槽一下google。命名莫名其妙故弄玄虛。看到一個IBinder,腦子里除了邦德兒之外沒有別的想法。我覺得,在設計上transact應該對應一個ISenderBinder,而onTransact對應一個IReceiverBinder。Binder實現了ISenderBinder和IReceiverBinder接口。這樣的邏輯才夠清晰。客戶端只要看到ISenderBinder就倍感親切,服務端只要看到IReceiverBinder就感覺自己在為別人做好事。一開始要做的事情就是打開通信通道,也就是把ISenderBinder這個東西對應的對象傳給客戶端。而服務端用誰進行服務都無所謂,只要是跟ISenderBinder是一對的就OK。BInderProxy應該叫做SenderBinder才合適。

?

?

?????? 那么對于應用程序來說,他需要什么?他需要函數調用,而不是transact這類東西。如果整天關心這些底層的打包解包那么也就很頭大了。IActivityManager這個是用戶需要的接口,之前的transact接口明顯不合適讓用戶使用。把惡心的transact函數適配到IActivityManager。用戶用起來更好用了。既然是適配,那么就有個接口轉換。一個叫做asInterface,一個叫做asBInder。網上一講這個東西就說是代理。這是其實是適配。asInterface將IBinder適配為IActivityManager。而asBInder將IActivityManager適配為IBinder。

?????? google的代碼里面,經常把這個能代表遠程對象的東西叫做代理。僅此而已。只要能代表遠程對象并執行函數。那么就叫做代理。具體怎么實現的,并不關心。在這里代理只是一種脫離實際代碼的宏愿。

?

?

轉載于:https://www.cnblogs.com/android-blogs/p/5420312.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458060.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458060.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458060.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ftp改為sftp_淺談 FTP、FTPS 與 SFTP

二狗子最近搭建了一個圖片分享網站,每天都有好多人在他的網站上傳許多照片,這些照片還會通過內部的邏輯同步到又拍云存儲中,非常方便。但不久后問題就來了,由于剛開始的用戶照片管理規劃沒有做好,隨著用戶上傳的圖片越…

如何解決秒殺的性能問題和超賣的討論

2019獨角獸企業重金招聘Python工程師標準>>> 最近業務試水電商,接了一個秒殺的活。之前經常看到淘寶的同行們討論秒殺,討論電商,這次終于輪到我們自己理論結合實際一次了。 ps:進入正文前先說一點個人感受,…

C# 從Excel中讀取時間數據

之前寫到從Excel中讀取時間數據 //讀取Excel數據Excel.Application xapp new Excel.Application();string filepath txt_Excel.Text;Excel.Workbook xbook xapp.Workbooks._Open(filepath, Missing.Value, Missing.Value,Missing.Value, Missing.Value, Missing.Value, Miss…

grid autosport額外內容下載慢_清理大王app下載-清理大王v1.0安卓下載

清理大王,下面由小編給大家介紹一下這款軟件,該軟件是一款非常不錯的手機清理服務應用軟件,清理大王app為用戶提供了手機垃圾清理,內存加速,優化手機,解決手機卡頓的情況。感興趣的朋友歡迎使用微俠下載&am…

(轉)瀏覽器兼容的JS寫法總結

-、元素查找問題1. document.all[name] (1)現有問題:Firefox不支持document.all[name] (2)解決方法:使用getElementsByName(name),getElementById(id)等來替代。 2. 集合類對象問題 (1)現有問題:IE中對許多集合類對…

java面試總結(第一天)

臨近大學畢業,出來試試找工作,學c#出身,半路出家java,做過幾個ssh、stringMVC的項目。基礎知識不太扎實,勿噴 以下是我面試過程中遇到的問題 ----------------------------------------------------------------------…

怎么看cudnn的版本好_祖墳風水怎么看,好祖墳有什么征兆?

人們之所以看重祖墳的風水,是因為祖墳的風水與后代子孫的運勢密切相關,可以說祖墳的風水好不好關系著子孫后代的運勢順不順,因此對于祖墳的風水好壞人們是非常在意的,那么祖墳風水怎么看,好祖墳有什么征兆呢?下面是小編…

iOS - Swift SQLite 數據庫存儲

前言 采用 SQLite 數據庫來存儲數據。SQLite 作為一中小型數據庫,應用 iOS 中,跟前三種保存方式相比,相對比較復雜一些。注意:寫入數據庫,字符串可以采用 char 方式,而從數據庫中取出 char 類型&#xff0c…

Hibernate 多對多關聯查詢條件使用

from Brand as b inner join fetch b.styles as s where s.styleId? 轉載于:https://www.cnblogs.com/cocoat/p/5427467.html

Spark 寬依賴和窄依賴

2019獨角獸企業重金招聘Python工程師標準>>> 我們知道RDD就是一個不可變的帶分區的記錄集合,Spark提供了RDD上的兩類操作,轉換和動作。轉換是用來定義一個新的RDD,包括map, flatMap, filter, union, sample, join, groupByKey, co…

smart gesture安裝失敗_WinCC flexible SMART V3 SP2安裝步驟以及常見錯誤解決方法

1安裝配置1. win7和win10系統都可以裝2. 運行內存至少要2G。3. 硬盤儲存空間至少要3G。2安裝注意事項1.安裝本軟件之前必須要關閉所有殺毒軟件(例如360安全衛士/360殺毒/電腦管家)等。2.其它西門子軟件不要使用或者打開。3.安裝之前確保硬盤空間充足。3下載地址https://bbs.jcp…

各類數據集整理(持續更新中ing)

轉自:https://zhuanlan.zhihu.com/p/84088095 最近一次新增:2020.02.11 大家好,先給各位抱拳了!我是和鯨(科賽 http://kesci.com)的運營一枚,今天給大家分享以下我們(通過網線&…

Java Experiment 3 PairProgramming

http://www.cnblogs.com/20145106ssr/p/5428222.html 轉載于:https://www.cnblogs.com/Christen/p/5428655.html

啟動頁面和各設備的寬高比及像素

2019獨角獸企業重金招聘Python工程師標準>>> iOS7只能用LaunchImage來布置啟動畫面,只能用圖片。iOS8以后支持LaunchScreen.xib來布置,可以自己添加控件。iOS8以及以后的用LaunchScreen來配置啟動頁。iOS8以后的會走這個設置,而io…

cc壓力測試_中小型網站如何防范CC攻擊?

大公司就不說了,付費CDN,防火墻,WAF,大流量,一般也會配置專門的安全問題響應團隊。今天側重討論一下中小型網站如何(優雅)防范CC攻擊。中小站點安全問題通病:對安全問題不重視&#…

ubuntu16.04 360隨身WiFi2

查看kernel版本,插入360隨身WiFi2,打開終端,執行下面命令即可。 ------------------------------------------------------------------------------------------------------------- From your kernel version, 4.2.0-16, it appears that…

泛型復習

回顧泛型類 泛型類&#xff1a;具有一個或多個泛型變量的類被稱之為泛型類1、class A<T>{} 2、在創建泛型實例時&#xff0c;需要為其類型變量賦值A<String> anew A<String>(); *如果創建實例時&#xff0c;不給類型變量賦值&#xff0c;那么會有一個警告&am…

.net core EPPlus npoi_2020 ASP.NET界面開發:DevExpress v20.1支持.NET Core設計時

DevExpress ASP.NET Web Forms Controls擁有針對Web表單(包括報表)的110種UI控件&#xff0c;DevExpress ASP.NET MVC Extensions是服務器端MVC擴展或客戶端控件&#xff0c;由輕量級JavaScript小部件提供支持的70個高性能DevExpress ASP.NET Core Controls&#xff0c;包含功能…

ubuntu android studio SDK emulator directory is missing

ctrlH&#xff0c;搜索Android studio&#xff0c;把所有的都刪除&#xff0c;再次安裝即可下載

有關于我的一點想法

之前失眠寫的&#xff0c;從空間搬運過來 之前一直想寫一下有關自己想法。趁著失眠寫一寫。 不知道是不是幸運&#xff0c;我有幸認識了吳寶俊老師。他寫博客&#xff0c;我經常去看他寫的博客。后來在留言板發言幾次也就熟了。雖然也僅限網友吧……但是我需要人給我指點迷津。…