Android aidl一个service同时绑定多个客户端client

在Android开发中,当一个Service需要与多个client通过AIDL进行通信时,通常会遇到问题。由于Service的机制,多次bind不会重复调用onBind方法。为了解决这个问题,可以创建一个返回多种Binder的Factory,通过Factory根据类型生成不同的Binder实例。博客提供了具体的实现代码,包括在Service中创建BinderFactory以及客户端如何获取并使用不同的Binder。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、场景

最近开发过程中,遇到了这样的场景,aidl在service和client通信的过程中,一个service需要同时绑定多个client进行通信。

一开始我的想法是:

这种写法绑定多个客户端是有问题的,绑定了一个没有解绑的话,其他client是不会走这个onBind方法。

因为这是Android四大组件之一的Service的机制决定的。一个service经过bindService之后,再次去bindService,是不会再走onBind回调的。

二、解决办法(一个Service返回多种Binder的能力)

为了减少Service占用资源,应该尽量减少Service的数量,而Service的onBind方法再被绑定后会返回一个Binder,如果没有解绑,就不会再执行onBind方法了,所以即使第二次再intent中传入了不同类型的来获取新的Binder,也是不成功的。

解决的方法:Service返回一个工厂类binder,通过这个工厂类binder来生成不同的binder即可。

首先创建一个IBinderFactory.aidl

interface IBinderFactory {
    IBinder generateBinder(int binderType);
}

在Binder实现类中,根据binderType返回不同的Binder,具体代码如下:

    @Ove
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值