AIDL 与 Messenger的异同
对于跨进程的调用
AIDL返回值是同步的,而Messenger是异步的。Aidl调用service的方法,会等待直到service中的方法执行完毕。
AIDL在Service中会针对每个请求开启新线程来执行客户端的调用。而Messenger会把消息放在主线程的队列里。
AIDL的实现,要注意线程安全的实现
oneway 关键字
修饰远程调用:
远程调用不会阻塞,它只是发送食物数据并立即返回
修饰本地进程:
不会有任何影响,调用仍是同步调用
AIDL支持的类型
- Java编程语言的原生基本类型 int、long、char、boolean
- String
- CharSequence
- List
- List中的所有元素必须是上面支持的类型
- 另一端实际接受的具体类型始终是ArrayList
- Map
- Map中所有的元素都必须是上面支持的类型
- 另一端实际接收的具体类始终是HashMap接口
必须为上面每个类加入import语句
一个AIDL的例子
Service端
1、编写AIDL的文件
// IAidlService.aidl package com.jue.testservice1; interface IAidlService { String getName(int num); }2、添加AndroidManifest文件
<service android:name=".AidlService" android:process=":AidlService" android:exported="true" android:enabled="true" > <intent-filter> <action andr