用于将办事端的Binder对象转换成客户端所须要的AIDL接口的类型对象,这种转换时区分过程的,如不雅客户端和办事端位于同一过程,那么此办法返回的就是办事端的Stub对象本身,不然返回的时体系封装后的Stub.proxy对象。
- asBinder
这个办法运行在办事端的Binder线程池中,当客户端提议跨过程请求的时,长途请求会经由过程体系底层封装后交由此办法来处理。该办法的原型为
大年夜致步调如下:
- 办事端
@Override
public boolean>办事端经由过程code可以肯定客户端请求的目标办法是什么,接着大年夜data中掏出目标办法所须要的参数(如不雅目标办法有参数的话),然后履行目标办法,当目标办法履行完毕后,就向reply中写入返回值(如不雅目标办法有返回值的话),onTransact办法的履行过程就是如许的。须要留意的时,如不雅此办法返回false,那么客户端的请求就会掉败,是以我们可以应用这个特点来做权限验证,毕竟我们也不欲望随便一个过程都能长途调用我们的办事。
- Proxy#getBookList
这个办法运行在客户端,当客户端调用此办法时,它的内部实现是如许的:起首创建该办法所须要的的输入型Prcel对象 _data、输出型Prcel对象 _reply和返回值对象List;然后把该办法的参数信息写入 _data中(如不雅有参数的话);接着调用transact办法来提议RPC(长途过程调用)请求,同时当前哨程挂起;然后办事端onTransact办法会被调用,直到RPC过程返回后,当前哨程持续履行,并 _reply中掏出RPC过程的返回结不雅;最后返回 _reply中的数据。
过程名以 “:”的含义是指要在过程名前面附加上当前的包名,这个过程属于当前应用的私有过程,其他应用弗成以和他跑在同一个过程。
- com.xxx.xxx
Proxy#getBookList
这个办法运行在客户端,它的履行过程和getBookList是一样的,addBook没有返回值,所以他不须要大年夜 _reply中掏出返回值。留意:当客户端提议长途请求时,因为当前哨程会被挂起直至办事器返回数据,所以如不雅一个长途的办法是很耗时的话,那么不克不及再UI线程中提议次长途请求;其次,因为办事端的Binder办法运行在Binder的线程池中,所以Binder办法不管是否耗时都应当采取同步的方法实现,因为它已经运行在一个线程中了。为了更好的解释Binder,下面给出一个工作机制的图:

接下来,介绍下Binder的两个很重要的办法 linkTodeath 和 unlinkTodeath,如不雅办事端的Binder连接断裂 (称之为 Binder 逝世亡),会导致我们长途调用掉败。更为关键的时,如不雅我们不知道Binder的连接已经断裂,那么客户端的功能就会受到影响。为此我们可以给Binder设置一个逝世亡代劳,当Binder逝世亡时,我们就会收到通知,这个时刻我们就可以给Binder设置一个逝世亡代劳,这个时刻就可以从新提议连接请求大年夜而恢复连接。
声明一个IBinder.DeathRecipient对象,IBinder.DeathRecipient是一个接口,其内部只有一个binderDied,我们须要实现这个办法,当binder逝世亡的时刻,体系就会回调binderDied办法,然后我们就可以移除之前绑定的binder代劳并从新绑定长途办事:
- //烧毁代劳类,重启办事
- private IBinder.DeathRecipient mDeathRecipient = new IBinder.DeathRecipient() {
- @Override
- public void binderDied() {
- Log.w(TAG, "binder: deed");
- mIBinderPool.asBinder().unlinkToDeath(mDeathRecipient, 0);
- mIBinderPool = null;
- connectBinderPoolService();
- }
- };
- mIBinderPool = IBinderPool.Stub.asInterface(iBinder);
- try {
- mIBinderPool.asBinder().linkToDeath(mDeathRecipient,0);
推荐阅读
中国人平易近银行宣布他们在近期成立了金融科技(FinTech)委员会。金融科技是技巧驱动的金融立异,为金融成长注入了新的活力,也给金融安然带来了新挑衅。中国人平易近银行将组织深刻研究金>>>详细阅读
本文标题:Android中的IPC机制
地址:http://www.17bianji.com/lsqh/35226.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示