aidl 中通过RemoteCallbackList 运用到的回调机制: service回调activity的方法 .

RemoteCallbackList 机制分析 前言: RemoteCallbackList主要用于aidl的跨进程通信,并且主要是服务端回调客户端的方法。 回调的aidl文件如下, package com.•••; interface ICallback { void onGetservice(String info); } 主要分为2步, private final RemoteCallbackList mRemote 阅读详情
 

说明:我没有写实例代码,直接拿项目中的代码,有点懒了,这里我省略贴出两个aidl文件。

  TtsService extends Service

  1. private final RemoteCallbackList<ITtsCallback> mCallbacks  
  2.            = new RemoteCallbackList<ITtsCallback>();  


  1. private final android.speech.tts.ITts.Stub mBinder = new Stub() {  
  2.   
  3.     public int registerCallback(String packageName, ITtsCallback cb) {  
  4.         if (cb != null) {  
  5.             mCallbacks.register(cb);  
  6.             mCallbacksMap.put(packageName, cb);  
  7.             return TextToSpeech.SUCCESS;  
  8.         }  
  9.         return TextToSpeech.ERROR;  
  10.     }  
  11.   
  12.     public int unregisterCallback(String packageName, ITtsCallback cb) {  
  13.         if (cb != null) {  
  14.             mCallbacksMap.remove(packageName);  
  15.             mCallbacks.unregister(cb);  
  16.             return TextToSpeech.SUCCESS;  
  17.         }  
  18.         return TextToSpeech.ERROR;  
  19.     }  
  20.   
  21.   
  22.     public int speak(String callingApp, String text, int queueMode, String[] params) {  
  23.         ArrayList<String> speakingParams = new ArrayList<String>();  
  24.         if (params != null) {  
  25.             speakingParams = new ArrayList<String>(Arrays.asList(params));  
  26.         }  
  27.         return this.speak(callingApp, text, queueMode, speakingParams);  
  28.     }  

  1. private void dispatchProcessingCompletedCallback(String packageName) {  
  2.     ITtsCallback cb = mCallbacksMap.get(packageName);  
  3.     if (cb == null){  
  4.         return;  
  5.     }  
  6.     //Log.i("TtsService", "TTS callback: dispatch started");   
  7.     // Broadcast to all clients the new value.   
  8.     final int N = mCallbacks.beginBroadcast();  
  9.     try {  
  10.         cb.processingCompleted();  
  11.     } catch (RemoteException e) {  
  12.         // The RemoteCallbackList will take care of removing   
  13.         // the dead object for us.   
  14.     }  
  15.     mCallbacks.finishBroadcast();  
  16.     //Log.i("TtsService", "TTS callback: dispatch completed to " + N);   
  17. }  

  1. @Override  
  2. public void onDestroy() {  
  3.     super.onDestroy();  
  4.   
  5.     // TODO replace the call to stopAll() with a method to clear absolutely all upcoming   
  6.     // uses of the native synth, including synthesis to a file, and delete files for which   
  7.     // synthesis was not complete.   
  8.     stopAll();  
  9.   
  10.     // Unregister all callbacks.   
  11.     mCallbacks.kill();  
  12. }  


在activity中

  1. mITtscallback = new ITtsCallback.Stub() {  
  2.                 public void processingCompleted() throws RemoteException {  
  3.                     if (listener != null) {  
  4.                         listener.onProcessingCompleted();  
  5.                     }  
  6.                 }  
  7.             };  
  8.   
  9.   result = mITts.registerCallback(mPackageName, mITtscallback);  

上面只是一个贴代码没有做任何说明,基本的意思我想大家也能通过代码来看懂。
RemoteCallbackList 跨进程通信中的使用 这只是一个简单的示例,实际使用中还需根据具体的需求进行适当的修改和扩展。是专门用于管理跨进程回调接口的类,它提供了一组方法来注册、注销和通知回调。在 Android 中,可以使用。类来实现跨进程通信中的回调管理。 阅读详情

相关推荐

Android AIDL与Binder机制:跨进程通信核心解析

进程间通信(IPC)是Android开发中的关键技术,AIDL作为官方推荐的跨进程通信方案,其底层基于Binder机制实现。Binder通过Linux内核驱动和内存映射技术,实现了高效的数据传输,避免了传统IPC的多次数据拷贝。在Android 8.0及更高版本中,Binder引入了多域支持和分散-聚集技术,进一步提升了性能。AIDL支持复杂数据类型和双向通信,特别适用于需要结构化数据传输和实时回调的场景。通过Parcelable对象序列化和RemoteCallbackList管理,开发者可以构建稳定的跨进

weixin_34043301的博客 365

Android AIDL示例-RemoteCallbackList添加移除监听

RemoteCallbackList很好的解决了IPC过程当中可能出现的某一方进程Crash,引发另外一方Exception的问题。 DeathRecipient理解和调用(解决Server端进程意外终止,Client端得到的Binder对象丢失问题)。

Jason_Lee155的博客 3099

Android AIDL跨进程通信开发全解析

跨进程通信(IPC)是Android开发中的重要技术,用于解决不同进程间的数据交互问题。AIDL(Android接口定义语言)作为Android官方IPC方案,通过定义标准化接口和自动生成代理代码,简化了Binder通信的复杂度。其核心原理是利用Parcelable序列化机制和Binder驱动,实现内存隔离环境下的安全数据传输。在电商支付、模块化架构等场景中,AIDL能高效处理复杂数据类型和同步/异步调用。相比Broadcast等方案,AIDL在性能优化方面优势明显,支持定向tag参数和oneway异步调用

weixin_34323858的博客 335

【Android】源码之 RemoteCallbackList

最近在替换蓝牙方案商的时候,发现其在使用 RemoteCallbackList 进行回调。于是抱着学习的心态来看看这个类吧。 在 Android 中,`RemoteCallbackList` 类是一个用于跨进程通信的工具类,可以用来注册、注销和通知客户端的回调接口。它在 Android 系统中广泛应用于各种系统服务和框架组件中,如通知服务、Activity 生命周期回调、媒体播放器等等。

嘴巴吃糖了 2056

Android AIDL跨进程通信实战:从原理到书籍管理服务实现

在Android开发中,跨进程通信(IPC)是构建模块化、服务化应用的核心技术,它解决了不同进程间内存隔离导致的数据共享难题。其底层原理基于Binder机制,通过序列化与反序列化实现数据在进程间的安全传输。AIDL作为Binder的上层封装,以接口定义语言的形式,将复杂的底层通信抽象为面向对象的服务契约,极大提升了开发效率与代码可维护性。这项技术的核心价值在于实现了应用组件间的高效解耦与功能复用,广泛应用于系统服务调用、多进程应用架构以及插件化开发等场景。本文以书籍管理服务为例,深入剖析AIDL的完整实现链

weixin_34056162的博客 352

AIDL监听器回调

自己写的一个通过AIDL进行注册的小实例 需要将4个项目都导入开发工具中 其中项目分别为 register_service 后台服务 register_service_aidl 外部API与service的AIDL接口 register_service_api 外部API(即暴露给UI的接口) register_ui 注册UI 调用关系为 ui->service_api---->service

aidl 中通过RemoteCallbackList 运用到的回调机制: service回调activity的方法

说明:我没有写实例代码,直接拿项目中的代码,有点懒了,这里我省略贴出两个aidl文件。   TtsService extends Service private final RemoteCallbackList mCallbacks = new RemoteCallbackList(); private final android.speec

沈纵情 1万+

软件测试--用例篇(测试用例的好处、测试用例的七种设计方法、测试用例的粒度、测试用例的评价)

作为软件测试工程师,最主要的工作就是:编写测试用例,那么为什么要编写测试用例?它有什么好处?如何编写测试用例?测试用例写简单好还是复杂好?如何评价测试用例的质量? 天呐撸!能说不会吗?! 作为倾向软件测试工程师的老铁们,还是一起来学习吧! 一、编写测试用例的好处 测试用例是测试者的依据 测试用例使得工作可重复,是自动化测试的基础 补充:自动化测试的前提条件是:功能比较稳定,页面...

cherrydreamsover的博客 3734

android adil 回调,aidl 中通过RemoteCallbackList 运用到的回调机制: service回调activity的方法...

说明:我没有写实例代码,直接拿项目中的代码,有点懒了,这里我省略贴出两个aidl文件。TtsService extends ServiceprivatefinalRemoteCallbackListmCallbacks=newRemoteCallbackList();privatefinalandroid.speech.tts.ITts.StubmBinder=newStub(){pub...

weixin_42234804的博客 428

Win10无外网热点搭建全指南:纯局域网通信与设备互联

热点并不是只有共享上网一种用途。在很多工程与办公场景中,我们需要的是让手机、笔记本、开发板等设备临时组成一个纯内网,完成文件传输、端口调试或局域网联机,而不需要任何外网出口。Win10笔记本在不连接互联网的状态下,借助系统移动热点或netsh承载网络,完全可以创建一个无外网热点,实现设备间二层互通。其核心在于利用SoftAP建立虚拟无线接入点,并绕开或禁用ICS的NAT转发。掌握这一技术,可在会议、出差、物联网调试等场景中快速搭建临时局域网,无需额外路由器。本文详细梳理三种实现路径、操作步骤及常见故障排查,

weixin_29230773的博客 238

告别盲目调参:手把手教你用RKISP2.x Tuner理解AWB、AE、NR等核心模块

本文详细介绍了如何使用RKISP2.x Tuner工具进行ISP调试,重点解析AWB、AE、NR等核心模块的调参技巧。通过RV1126平台的实际操作演示,帮助工程师快速掌握可视化对比实验方法,告别盲目调参,提升图像信号处理效率。

weixin_30300225的博客 393

Android | AIDL通信

文章摘要:本文系统介绍了Android进程间通信(IPC)机制,重点解析了Binder和AIDL的实现原理与应用。内容涵盖进程隔离基础、IPC方式对比(Bundle/Intent、Messenger、AIDL等)、Binder架构的四层模型(应用层、Framework层、内核层、ServiceManager)及其核心特性(一次拷贝、1MB限制)。详细阐述了AIDL开发流程(接口定义、定向Tag、死亡监听)、跨进程回调管理(RemoteCallbackList)以及系统级权限校验机制。最后提出Binder连接

codeSong的博客 381

别再死记硬背Modbus报文了!用Python+Modbus Poll手把手教你调试工业设备

本文详细介绍了如何利用Python和Modbus Poll工具高效调试工业设备通信。通过实战案例和代码示例,帮助读者快速掌握Modbus通信协议的核心配置、数据监控技巧及Python自动化脚本编写,解决工业设备调试中的常见问题,提升工作效率。

weixin_42520780的博客 344

Android IPC与Binder机制深度解析:从原理到AIDL实战

进程间通信(IPC)是操作系统实现多进程协作与数据交换的核心机制,它通过内核提供的安全通道,允许不同进程间高效、可控地传递数据与指令。其底层原理通常涉及内存映射、序列化与内核调度,旨在突破进程隔离的边界,实现模块解耦与资源共享。在Android生态中,IPC的技术价值尤为突出,它支撑着系统服务调用、组件通信与多进程架构,是构建复杂、高性能应用的基础。Binder作为Android独有的IPC方案,通过一次拷贝与内存映射机制,在安全与效率间取得了最佳平衡,成为系统级通信的基石。AIDL(Android接口定义

weixin_34026276的博客 353

白话详细解读(七)----- CBAM:Convolutional Block Attention Module

一、CBAM简介 论文链接:https://x.sci-hub.org.cn/scholar?hl=zh-TW&as_sdt=0%2C5&q=CBAM%3A+Convolutional+Block+Attention+Module&btnG=&oq=CB CBAM这篇论文是在2018年提出的,自提出之后,已经被引用上千次,可见其影响力。CBAM是一种专门为了卷积神经网络而设计的注意力模块,传统的卷积存在只关注局部信息,而往往忽略全局信息的弊端,以3*3卷积为例,滤波器有9个

奋斗の博客 1万+

STM32面试知识点总结分析

通过Boot引脚设定,寻找初始地址初始化栈指针 __initial_sp指向复位程序 Reset_Hander设置异常中断 HardFault_Handler设置系统时钟 SystemInit调用C库函数 _main。

嵌入式技术开发 2514

Android Service启动与绑定机制详解及优化实践

在Android开发中,Service作为实现后台任务处理的核心组件,其启动(startService)与绑定(bindService)机制是开发者必须掌握的基础知识。从技术原理看,启动式服务具有独立生命周期,适合执行无需交互的长期任务;而绑定式服务通过Binder机制建立IPC通信通道,支持实时数据交换。随着Android系统版本演进,后台服务限制日益严格,合理选择WorkManager或JobScheduler等替代方案变得尤为重要。在电商App、音乐播放器等典型应用场景中,混合使用两种模式并配合Bin

weixin_33795806的博客 373

HTML满屏跳动的爱心(完整代码)

HTML语言实现满屏跳动爱心的完整代码。

AIGC 12万+

Android AIDL跨进程通信工程搭建指南:从模块化设计到实战避坑

跨进程通信(IPC)是构建复杂Android应用的核心技术,它允许不同进程间的组件安全高效地交换数据与调用服务。其底层原理基于Binder机制,通过内核驱动实现进程间内存共享与权限控制。掌握IPC技术对于开发多进程架构应用、系统服务交互及模块化框架具有重要价值,能显著提升应用性能、安全性与可维护性。AIDL作为Android官方指定的IPC实现工具,通过接口定义语言简化了Binder通信的复杂度。本文聚焦AIDL工程实践,详细拆解了采用多模块设计(如独立的interface、server、client模块)

weixin_34414196的博客 434

js逆向第3例:蝉妈妈大屏实时数据formDataSign加密

蝉妈妈大屏抖音直播实时数据是抓取抖音直播间数据的实时数据,有类似需求的公司但没有能力去搞定抖音,抓取蝉妈妈数据也是一个不错的选择。接下来就是调试找到加密点,说句题外话蝉妈妈的所有js文件打包方式用的都是webpack5,那如何区分打包方式可以阅读这篇文章。时间戳 ,经过观察发现加密参数是实时变化的。这个函数扣下来,在浏览器控制台中测试一下。言归正传,打断点找到变量。继续打断点向上找又发现了。查看请求参数,可以看到。请求的内容,那么这个。

花臂不花Home 1542

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

上一篇: **android进程间通信:使用AIDL .**
下一篇: Android进程间通信--消息机制及IPC机制实现
perjer123
博客等级 码龄18年 6粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值