Android知识点总结(五)进程间通信之Binder连接池

本文总结了Android进程间通信中的Binder连接池技术。在面对多个AIDL接口时,通过Binder连接池,可以在一个Service中返回不同业务模块的Binder对象,避免创建多个Service。详细介绍了如何创建AIDL接口、实现Stub类,以及Binder池的工作机制和具体实现。最后通过客户端验证了该技术的可行性,强调了在主线程中避免耗时操作的重要性。
摘要由CSDN通过智能技术生成

Android知识点总结(四)进程间通信
上一篇文章记录了Messenger及AIDL的使用。其中AIDL的使用是最广泛的,其大致流程:

  • 首先创建一个Service和一个AIDL接口
  • 接着创建一个类继承自AIDL接口中的Stub类并实现Stub中的抽象方法(也可以直接使用匿名内部类的方式实现),在Service的onBind方法中返回这个类的对象
  • 然后客户端就可以绑定服务端Service,建立连接后就可以访问远程服务端的方法了。

但是如果项目业务越来越大,需要10个AIDL来进行进程间通信时,创建10个Service显然不太现实,这时就需要Binder连接池技术,该模式工作机制是这样的:

  • 每个业务模块创建自己的AIDL接口
  • 同时提供一个Binder池接口,提供queryBinder,这个接口能根据业务需求,返回对应的Binder对象,这样不同业务模块就能根据自己的Binder进行远程调用
  • 此时只需一个Service,在其onBind方法里返回Binder池对应的Binder类,客户端就能获取不同的Binder实现所需功能。
    在这里插入图片描述
    下面写一个例子,首先建立两个AIDL接口,模拟多个业务模块的情况:
// ISecurityCenter.aidl
package com.scy.component.testlaunteractivity;

// Declare any non-default types here with import statements

interface ISecurityCenter {
   String encrypt(String content);
   String decrypt(String psd);
}
// ICompute.aidl
package com.scy.component.testlaunteractivity;

// Declare any non-default types here with import statements

interface ICompute {
    int add(int a, int b);
}

接着创建类继承各自AIDL接口中的Stub类并实现Stub中的抽象方法:

public class SecurityCenterImpl extends ISecurityCenter.Stub{
    private static final char SECRET = '*';
    @Override
    pub
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值