Android中的IPC机制——Binder

Binder的作用

Binder是Android中的一个类,它是Android的一种跨进程通讯方式;在Android系统中,Binder是Manager连接ManagerService的桥梁;在应用开发中,Binder是实现客户端与服务端通讯的媒介,在Activity bindService的时候会获取到一个包含服务端业务调用接口的Binder,透过这个Binder Activity可以实现与服务端的数据交互,而且通过基于AIDL的服务还可以实现跨进程通信。

Binder的重要方法

开头我们已经说过Binder是Android中的一个类,那么它又有哪些重要方法呢。
使用过

DESCRIPTOR

Binder的唯一标示,一般用当前的类名表示

asBinder

返回当前Binder对象

asInterface(IBinder obj)

此方法用于将服务端返回的Binder对象转换为客户端需要的AIDL对象,如果客户端与服务端在同一进程中,则返回的是服务端的Stub,如果是快进程的话,则返回的是Stub.proxy对象

onTransat(int code , Parcel data , Parcel reply , int flags)

每次客户端发起跨进程请求时,服务端就会调用次方法,通过code知道客户端需要调用哪个方法,如果有参数参入的话data会携带传入参数,如果调用的方法有返回值的话,则会在方法执行完之后将返回值写入reply参数中。onTransat方法本身也有一个boolean型返回值,如果这个返回参数为false的话则方法调用会失败,因此如果我们希望某个方法不允许被调用或者要做验证调用的话,也可以通过此方法来实现

Binder需要注意的地方

1.AIDL生成的类中会有个生出Stub的内部类,这个内部类就是继承自Binder,所以AIDL本质也是通过Binder作为媒介实现跨进程通信的,然而Binder的所有方法都是执行在Binder线程池中的,如果有涉及到ui上的处理的话,需要使用Handle来实现而不能直接操作UI
2.当客户端向服务端发起请求,如果远程一个方法很耗时的话那也不能在UI线程发起请求,因为发起请求的线程会一直挂起,知道服务端回应。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值