1.Android中AIDL的作用是什么?
AIDL是一个缩写,全称是Android Interface Definition Language,也就是Android接口定义语言。
设计这门语言的目的是为了实现进程间通信,尤其是涉及多线程并发情况下的进程间通信。
我们只需要编写AIDL文件,系统就会自动为我们生成代码,大大简化了Android程序员的工作。
2.它所支持的参数类型是?
Java 编程语言中的所有原语类型(如 int、long、char、boolean 等等)
String
CharSequence;
List:里面每个元素都必须能够被AIDL支持;List支持泛型(如List<String>);另一端实际接收的具体类始终是 ArrayList,但生成的方法使用的是 List 接口
Map:里面每个元素都必须能够被AIDL支持,包括key和value;Map是不支持泛型的;另一端实际接收的具体类始终是 HashMap,但生成的方法使用的是 Map 接口
Parcelabl:所有实现了Parcelable接口的对象
AIDL:所有的AIDL接口本身也可以在AIDL文件中使用
3.默认情况下AIDL的调用过程是同步还是异步?
同步,客户端调用远程服务的方法,被调用的方法运行在服务端的Binder线程池中,同时客户端线程会被挂起,这个时候如果服务端方法执行比较耗时,就会导致客户端线程长时间地阻塞在这里,如果这个客户端线程是UI线程的话,就到导致客户端ANR。
4.如何指定AIDL为异步调用?
通过接口回调;
首先需要提供一个AIDL接口,里面声明用户感兴趣的事件,然后在服务端进行注册,这样当用户感兴趣的事情发生时,服务端就会回调,由于回调接口里声明的方法运行在客户端的线程池,客户端不能在它里面去访问UI相关的内容,如果要访问UI,可以使用handler切换到UI线程。当页面销毁时,要记得解注册,由于是多进程,注册和解注册需要借助RemoteCallbackList来实现。
=======================================================================
注:
同步调用、异步调用区别
所谓同步调用,在发起一个函数或方法调用时,没有得到结果之前,该调用就不返回,直到返回结果;异步调用的概念和同步相对,在一个异步调用发起后,被调用者立即返回给调用者,但调用者不能立刻得到结果,被调用者在实际处理这个调用的请求完成后,通过状态、通知或回调等方式来通知调用者请求处理的结果。
网友评论