Binder

binder机制可以类比 socket的网络编程理解。


请求方相当于 客户端,被请求的service相当于服务器端,它们

之间的通信是依赖底层的Binder驱动实现的。


被调用的service的会有一个线程监听client的请求调用,服务端接收到这个请求之后 会派发给服务端线程池里面的一条线程来执行[因此 服务端能同时处理的客户端请求是有限度的,线程池里面的线程是有限的]。

所有的AIDL方法都是在服务端的Binder线程池中执行的,也就是说,每一个AIDL方法执行的时候都会在一个服务端的线程池中执行。


当客户端发出请求给服务端之后 会被阻塞住,直到服务端返回结果为止。


客户端通过接口发起一次调用,消息发送到Binder驱动,Binder驱动通知服务端执行这个任务,返回结果给Binder驱动,Binder驱动唤醒客户端线程继续处理。


服务端(Service)通过AIDL回调接口,主动通知客户端(即回调客户端的AIDL接口的方法),该方法会执行在客户端的一个新起的线程中(并不在UI线程),所以此时要更新UI操作,就要切换线程了。

另外,在服务端数据集合一般使用CopyOnWriteArrayList,该类是线程安全的。因为服务端是用一个Binder线程池来处理客户端的各种请求,会存在多个客户端同时访问服务端的情况,数据集合必须实现线程同步。

注意:bindService的时候onServiceConnected回调运行在主线程


    

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值