安卓高手之路之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.mzph.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;我经常去看他写的博客。后来在留言板发言几次也就熟了。虽然也仅限网友吧……但是我需要人给我指点迷津。…