Moosphan/Android-Daily-Interview

2019-08-12:谈谈 AIDL?

Moosphan opened this issue · 12 comments

2019-08-12:谈谈 AIDL?

1.这个其实不怎么好回答,可以简单的回答就是通信,也可以理解我就是想让你知道我想让你知道一些东西,所以我们定义一些东西你我都这样用。
2.大家也可以比较一样其实跟webview跟js打交道也是一样,也是定义好了才能相互访问,
3.至于格式, 相互定义其实死的模式,可以百度,谷歌

常说AIDL是安卓的一种跨进程通信的方式,其实不太严谨,应该说Binder才是一种跨进程通信的方式,而AIDL是Binder的一种具体应用,有点类似于网络中的传输层和应用层,IBinder有自己的通信协议,负责建立和维护连接,发送数据,而AIDL则定义了更上一层的传输内容,而像ContentProvider、广播同样是利用IBinder进行工作的。

1、定义 AIDL 是 android Interface Dialog Launguage , 是一个android 接口 对话语言,
2、作用是 为了实现进程间之间服务的通信。
3、实现方式, Service Client 和 Service Service 同时 持有一个 AIDL文件,编译的时候, 会自动变成一个可以引用的Binder子类。 Client 绑定服务成功后, 获取这个子类,可以使用里面的方法。 Service 在 onBind 方法里面 返回 这个Binder 类。
4、内部实现原理 是Binder ,实现了进程之间的通信。

AIDL 基于Binder的跨进程通信方式,AIDL 需要定义客服端和服务端,需要定义相应的aidl 文件,客户端于服务端是相对的。 aidl 文件会生成对应的aidl.java 文件, 该文件中主要对应Stub, Proxy 两个关键类,当客户端请求服务端时,客户端会通过Stub.asInterface(IBinder).sum(a) 来判断, 服务端的IBider 于客户端是否是同一进程,如果是同一进程,则跟进程间通信没关系了,反之,则会将IBinder 包装为Proxy, 然后客户端调用proxy.sum(a)方法访问服务端,通过_data 传递参数,通过_reply 接受服务端返回数据。 客户端使用IBinder的transact将数据传给服务端, 服务端通过onTransact() 接受参数,并将处理结果写到_reply 中。

简单说一下

AIDL 是一种辅助工具,不用AIDL ,一样可以实现跨进程通讯

AIDL 的原理是binder,真正有跨进程通讯能力的也是 Binder,所以 AIDL 只是一个能帮你少写代码,少出错的辅助工具,由于设计的太好,使用太方便,所以非常常用

就像 retrofit 和okhttp 关系一样, retrofit 提供 更加友好的api,真正的网络请求还是由 okhttp发起的

AIDL更像是一种DSL吧,一般用来生成跨进程通信的相关方法。不用AIDL照样能跨进程通信

1、定义 AIDL 是 android Interface Dialog Launguage , 是一个android 接口 对话语言,
2、作用是 为了实现进程间之间服务的通信。
3、实现方式, Service Client 和 Service Service 同时 持有一个 AIDL文件,编译的时候, 会自动变成一个可以引用的Binder子类。 Client 绑定服务成功后, 获取这个子类,可以使用里面的方法。 Service 在 onBind 方法里面 返回 这个Binder 类。
4、内部实现原理 是Binder ,实现了进程之间的通信。

全称是Android Interface Definition Language 。 android接口定义语言

什么是AIDL?解决了什么问题?
答:AIDL是一种接口定义语言,Android中IPC方式的一种,使用AIDL可以简化IPC通信;
AIDL如何使用?
答:服务端首先要创建一个Service监听客户端的连接请求,然后创建一个AIDL文件,将暴露给客户端的接口在这个文件中声明,最后在这个Service中实现相关接口即可。
客户端绑定服务端的service,然后将服务端返回的Binder代理对象转换成AIDL接口所属的类型,最后调用AIDL中的方法即可。

它是c/s架构都要遵守的一个规范,按照这个规范去工作,通信

1、定义 AIDL 是 android Interface Dialog Launguage , 是一个android 接口 对话语言,
2、作用是 为了实现进程间之间服务的通信。
3、实现方式, Service Client 和 Service Service 同时 持有一个 AIDL文件,编译的时候, 会自动变成一个可以引用的Binder子类。 Client 绑定服务成功后, 获取这个子类,可以使用里面的方法。 Service 在 onBind 方法里面 返回 这个Binder 类。
4、内部实现原理 是Binder ,实现了进程之间的通信。

兄弟,Android Interface Definition Language,不是dialog Launguage ......

1、定义 AIDL 是 android Interface Dialog Launguage , 是一个android 接口 对话语言,
2、作用是 为了实现进程间之间服务的通信。
3、实现方式, Service Client 和 Service Service 同时 持有一个 AIDL文件,编译的时候, 会自动变成一个可以引用的Binder子类。 Client 绑定服务成功后, 获取这个子类,可以使用里面的方法。 Service 在 onBind 方法里面 返回 这个Binder 类。
4、内部实现原理 是Binder ,实现了进程之间的通信。

Android Interface Definition Language (AIDL)

AIDL是用于进程间的通迅 能够实现进程间的一对多实时并发通迅
通过定义AIDL接口 创建一个服务将接口暴露给客服端
客户端把定义的ALDL文件复制到项目中 通过bindService绑定服务端服务 并通过 定义AIDL.Stub.asInterface(service)将服务端返回的Binder代理对象转换成AIDL接口所属的类型 调用方法即可