一个Service管理多个AIDL接口

通常情况下,每个AIDL接口对应一个Service进行进程间通信,若有多个ADIL接口,也要创建多个Service,但Service是系统资源,无限制增加的话,会占用过多内存。下面就介绍下Binder连接池,以及怎样实现一个Service管理多个ADIL接口。

Binder连接池,是将各个业务模块的Binder请求统一转发到远程Service中去执行,可避免重复创建Sevice。

1 首先提供ISecurity、IPay两个接口,用于密码校验和支付

interface ISecurity {
    String encode(String psw);
    String decode(String psw);
}

interface IPay {
    void buy();
}

2 SecurityImpl、PayImpl是两个接口的实现

public class SecurityImpl extends ISecurity.Stub {//Stub内部类,其实就是一个Binder类
    private static final String TAG = "SecurityImpl lyl123";

    @Override
    public String encode(String psw) throws RemoteException {
        Log.e(TAG, "encode, psw = " + psw);
        char[] chars = psw.toCharArray();
        for (int i = 0;i < chars.length; i++){
            chars[i] ^= '^';
        }
        return new String(chars);
    }

    @Override
    public String decode(String psw) throws RemoteException {
        Log.e(TAG, "decode: psw = " + psw);
        return encode(psw);
    }
}


public class PayImpl extends IPay.Stub {//Stub内部类,其实就是一个Binder类
    private static final String TAG = "PayImpl lyl123";

    @Override
    public void buy() throws RemoteException {
        Log.e(TAG, "buy something");
    }
}

3 提供一个AIDL接口IBinderPool,并提供一个获取Binder的方法

interface IBinderPool {
    IBinder queryBinder(int binderCode);
}

4. Binder连接池的实现


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值