跨进程通信RemoteCallbackList的使用

文章介绍了在Android开发中如何使用RemoteCallbackList进行线程间通信,特别是与AIDL结合,实现ICarInfoCallBack接口的注册和注销,以及在接收到数据时如何回调所有已注册的接口。此外,还提到RemoteCallbackList可以防止重复调用和处理进程间的通信问题。
摘要由CSDN通过智能技术生成

在做FWK时,经常用到RemoteCallbackList,是线程与线程之间交流的的重要工具,他的主要作用就是把多个callback保存到列表里,在合适的时机同时回调,也可以防止重复的调用相同的任务,只保证你需要的一个结果回调。

还有一个值得注意的就是,通过aidl,我们可以实现client(后称客户端)和server(服务端)的双向通信,有时候server和client处于不同的进程当中,如果client意外退出,server再向client发送消息的话,就有可能导致server端也退出,这个时候安卓提供了 RemoteCallbackList 来为我们隐式解决了这种问题。

网上写原理的很多,我这个只记录怎么使用的,gogogo~~~

1、先定义一个AIDL,ICarInfoCallBack.aidl如下:

// ICarInfoCallBack.aidl
package com.test.libsvcarinfo;
 
interface ICarInfoCallBack {
    void onCanChangeEvent(int value);
}


2、我这里只写了一些如何使用RemoteCallbackList,至于AIDL中如何调用,还需要自己去学学AIDL使用。

public class Test {
	//初始化
	public RemoteCallbackList<ICarInfoCallBack> listeners = new RemoteCallbackList<>();	
 
	//注册接口方法
    public void registerCarInfoCallBack(ICarInfoCallBack callback) {
    //向RemoteCallbackList里面注册ICarInfoCallBack接口
		listeners.register(callback);
    }
 
    //取消注册接口的方法
    public void unRegisterCarInfoCallBack(ICarInfoCallBack callback) {
        //向RemoteCallbackList里面取消注册ICarInfoCallBack接口
		listeners.unregister(callback);
    }
 
	//调用此方法回调
    private void onReceiveData(int value) {
        //获取listeners长度,看看有多少个注册接口
        int len = listeners.beginBroadcast();
        for (int i = 0; i < len; i++) {
            //从listeners取出第i个ICarInfoCallBack
            ICarInfoCallBack carInfoCallBack = listeners.getBroadcastItem(i);
            //回调方法
			carInfoCallBack.onCanChangeEvent(value);
        }
        listeners.finishBroadcast();
    }
 
}

————————————————
版权声明:本文为CSDN博主「白水景东」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/LjingDong/article/details/119816891

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值