AIDL初体验--实践笔记

本文深入解析了AIDL的基础使用与自定义类型的方法,同时详细介绍了如何在AIDL中使用RemoteCallbackList进行跨进程通信,包括设置监听器及其实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

阅读项目源码的过程中,很多基于AIDL的代码还是看不太明白,基于项目中一处RemoteCallbackList的使用,搜索到以下的相关文章,做了学习和实践。本文包括AIDL基本使用和RemoteCallbackList使用两方面。

一、学习AIDIL使用

参考文章地址:https://www.jianshu.com/p/2683e27efe9a

1、基础操作

1)调试AIDLClient时,AIDLService开启,才是进程间通信环境;

     不然bindService调用后没有回调,mICalculateInterface是null。

2、自定义类型

1)Person类和对应的aidl结构如图,Person.aidl命名时提示文件名唯一性问题:先用别的名字,生成文件后再改写

2)ICalculateInterface中使用Person的时候,需要手动加入

import com.example.dongyanyz.aidlservice.Person;

不然build后,会报错:Error:aidl.exe E 07-24 10:29:29  7972 15992 type_namespace.cpp:107]     unknown type

3)CopyOnWriteArrayList(读操作性能高,写操作加锁:适用于多客户端连接服务器时自动处理多线程同步问题)。

参考文章地址:https://www.jianshu.com/p/9b6a4d0b94ac

4)AIDLService中自定义类和对应的aidl文件复制到AIDLClient中,目录如下,注意包名,类同步到java目录里,aidl同步到aidl目录里。

 

二、AIDL中的RemoteCallbackList使用

1、在AIDL文件中增加设置监听器时所需的接口,也必须时AIDL形式的接口。

2、监听器IOnNewPersonArrivedListener,客户端采用new IOnNewPersonArrivedListener.Stub()实例化。

3、IOnNewPersonArrivedListener中,如下方法可删除,若是删除确保客户端/服务端均删除, IOnNewPersonArrivedListener代码一致。

void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat,double aDouble, String aString);

4、AtomicBoolean线程安全,功能与boolean一致,但boolean线程不安全,只能保证当时值,而实际会有F/T两种值。多线程不安全。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值