Android通过aidl和监听者模式实现客户端与服务跨进程双向通信教程

1、client =>> service 

1.1 创建aidl文件:client和service需要在同样的位置,同一文件,复制粘贴到同一位置即可

1.1.1不同项目中如下创建:

client端创建

service端创建

1.1.2同一Android项目可以通过引用同一model

setting.gradle中配置

include ':projectName'
project(':projectName').projectDir = new File(projectPath)
app的gradle中的dependencies配置
implementation project(path: ':projectName')

注意自定义参数新建类以及后续监听类都需要放在同一位置。

1.2 service 实现aidl;

private final IUserService.Stub binder = new IUserService.Stub() {
//重写IUserService中的方法
}

1.3 service 的onBind方法中返回实现的aidl 的binder

@Override
public IBinder onBind(Intent intent) {
    // TODO: Return the communication channel to the service.
    Log.i("qiqiqi Service", "onBind");
    return binder;
}

1.4 client 通过bindService建立连接,bindService返回true即此刻连接已建立,并在客户端的onServiceConnected 中接受返回的iBinder

private ServiceConnection mConnection = new ServiceConnection() {
    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        Log.i("qiqiqi Client Model", "to connect service" + service);
        mService = IUserService.Stub.asInterface(service);
    }

    @Override
    public void onServiceDisconnected(ComponentName name) {

    }
};
Intent intent = new Intent();
intent.setComponent(new ComponentName(packgName, packageName.serviceName));
boolean isBind = mContext.bindService(intent, mConnection, Context.BIND_AUTO_CREATE);

1.5 最后client通过iBinder 即可从client 对service进行通信

mService.aidl中被实现的方法();

2. 通过监听者模式实现 service ==> client 

2.1 首先新建文件NotifyListerner.aidl,并在其中添加需要调用的通知到client的方法

2.2 在aidl文件中添加注册监听的方法

void registerListener(NotifyListerner listener);

2.3 client 端实现NotifyListerner中需要接受通知的方法

private ServiceListener mListener = new ServiceListener ();
mService.registerListener(mListener );
class ServiceListener extends NotifyListerner.Stub {
//回调的方法

        }

2.4 service端即可通过listener实现从service到client端的回调。

 mListener.回调的方法();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值