Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

2019-08-12:谈谈 AIDL? #119

Open
Moosphan opened this issue Aug 12, 2019 · 12 comments
Open

2019-08-12:谈谈 AIDL? #119

Moosphan opened this issue Aug 12, 2019 · 12 comments

Comments

@Moosphan
Copy link
Owner

No description provided.

@zhaoerlei1989
Copy link

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

@gabyallen
Copy link

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

@futurereal
Copy link

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

@xiongliang120
Copy link

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 中。

@yizems
Copy link

yizems commented Aug 23, 2019

简单说一下

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

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

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

@weikano
Copy link

weikano commented Sep 2, 2019

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

@shiweibsw
Copy link

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接口定义语言

@shiweibsw
Copy link

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

@aositeluoke
Copy link

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

@mikilangkilo
Copy link

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 ......

@lingrixin
Copy link

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)

@mlinqirong
Copy link

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests