AIDL(Android Interface Definition Language)
AIDL是android接口定义语言,为了实现进程间通信,进程并发下的进程间通信
默认支持:1.Java的8种基本数据类型 2.String 3.char 4.List 5.Map 6.Parcelable 7.AIDL
【定向TAG】:AIDL中的定向tag表示了在跨进程通信中数据的流向
in表示数据由客户端->服务端(服务端接收完整数据,客户端不变)
out表示数据由服务端->客户端(服务端接受空对象,对空对象存储改变)
inout自由双向(2,3类型数据默认且只能为in)
两种AIDL文件:1.parcelable Book(用来定义Parcelable对象,以供其他AIDL文件使用非默认支持的数据类型)
2.导入Bean类的包 (定义方法接口,以供系统使用来完成跨进程通信)
AIDL小练习
1.创建实现P接口的Bean类+重写readFromParcel()
2.书写AIDL内容 interfaceBookManager
3.移植相关文件,将aidl包复制到另一端的main目录下
4.在服务端实现AIDL中定义的方法接口具体逻辑,然后在客户端调用这些方法接口
5.重写BookManager.Stub中的方法,跑出RemoteException,使用synchronized(this)保证在同一时刻最多只有一个进程进行这段代码
tips:【java并发编程】
synchronized和Lock(保证原子性):保证任一时刻只有一个线程执行该代码块
保证可见性 volatile:共享变量被此修饰,他会保证修改的值立即被更新到主存,有其他线程读取会去内存中读取(同上)
保证有序性 volatile可以,同synchronized和Lock,先天“有序性”:happens-before原则
6.编写客户端代码:按钮点击事件,如果与服务端连接X attemptToBindService()->intent.setAction("aidl")
intent.setPackage("包名")
在其中给Book设置参数,添加入BookManager中,包裹异常
在onStart中,也添加attemptToBindService,在onStop中添加unBindService
实例化ServiceConnnection,在onServiceConnected中,反录mBookManager(.asInterfaceService)输出book信息
分析AIDL