<返回更多

Android学习笔记——AS中使用AIDL

2019-09-26    
加入收藏
Android学习笔记——AS中使用AIDL

 

AIDL

我在阅读源码的过程中,发现有很多需要进程间通信的地方,都采用了AIDL的形式,所以这里专门学习一下这个AIDL的用法

简介

AIDL是Android中IPC的一种方式,同样的还有理由共享文件、Messenger等等。但是相对来说,最主要用到的还是AIDL和Messenger————由于后者只能依次处理消息,因此主要还是AIDL用的多一点。而AIDL的底层还是需要用到Binder,这里先不去讨论,之后深究。

从总体上看,AIDL用法就是,把需要通信的两个组件(不同进程)分别作为客户端和服务端,类似于C/S架构,我们需要自定义一份xxx.aidl文件,作为一份通用的协议,这份协议需要在客户端和服务端各执一份。服务端需要实现AIDL文件定义的方法,客户端与服务端取得联系之后,来调用这些方法。因此AIDL使用起来其实很简单,分为以下几个步骤:

准备工作

为了演示用法,这里建立一个小demo。不对是两个,一个客户端,一个服务端

Android学习笔记——AS中使用AIDL

 

我这里创建了两个工程,分别作为客户端和服务端。

AIDL文件

先简单说下AIDL文件。这个文件作为一个协议,内容用JAVA语法描述的话,就是一个接口,可以将它类比于一个Java的接口文件。不过这个文件比普通的Java接口文件要求要严格一点,具体可以参考这篇文章,感觉说的挺详细的:

Android:学习AIDL,这一篇文章就够了(上)

要知道xxx.aidl不是可以随便放的。由于这份文件是客户端和服务端联系的纽带,因此对于这二者来说,这样一份AIDL文件,从包名到内部各种细节来说,都必须是一模一样的。实现起来也很简单,我们在某一端创建好,复制到另一端就可以了,当然复制的时候要注意目录结构要一致。

我这里在服务端创建一个AIDL文件,挪到客户端就可以了。

在AndroidStudio中很简单的操作:

Android学习笔记——AS中使用AIDL

 

这样便创建好了我们的AIDL文件,目录结构如下:

Android学习笔记——AS中使用AIDL

 

然后打开刚才创建的AIDL文件,内容如下:

Android学习笔记——AS中使用AIDL

 

我这里只是做一个简单的加法运算并返回结果。现在已经定义好了我们的协议。如果定义了一些非基本类型的类,也需要放在和AIDL文件同目录下。然后如下所示,将整个aidl目录复制————粘贴至作为客户端的那一方的同样的目录下:

Android学习笔记——AS中使用AIDL

 

好了,现在在两遍都编译一下,这样系统会自动的针对我们定义的AIDL文件生成一个对应的接口类,存放在这里:

Android学习笔记——AS中使用AIDL

 

Server端

接下来,在Server端,创建一个Service,内容如下:

Android学习笔记——AS中使用AIDL

 

然后在Manifest文件里注册一下,为隐式启动做准备

Android学习笔记——AS中使用AIDL

 

之后自然要运行一遍,将Service注册一下,之后才可以用

Client端

最后,在Clinet端简单的隐式启动刚才的Service,然后取得那个IBinder对象,转换为IMyAidlInterface对象,就可以使用了:

Android学习笔记——AS中使用AIDL

 

运行一遍,看看log:

这是服务端:

Android学习笔记——AS中使用AIDL

 

这是客户端:

Android学习笔记——AS中使用AIDL

 

总结

以上,介绍了AIDL的大致使用方式,可以看到,AIDL的核心原理其实就是我们定义的AIDL文件会编译时生成一个Java接口文件,这个文件包含了客户端、服务端的所有操作。

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>