您当前的位置:首页 > 电脑百科 > 程序开发 > 移动端 > Android

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

时间:2019-09-26 10:57:24  来源:  作者:
Android学习笔记——AS中使用AIDL

 

AIDL

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

简介

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

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

  • 创建一份AIDL文件,在其中定义好协议(接口)
  • 把进程间通信的被动一端作为服务端,创建一个Service,实现协议(接口)定义的方法,用来处理客户端请求
  • 另一端,客户端,与服务端建立链接,开始调用方法

准备工作

为了演示用法,这里建立一个小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接口文件,这个文件包含了客户端、服务端的所有操作。



Tags:Android AIDL   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
AIDL我在阅读源码的过程中,发现有很多需要进程间通信的地方,都采用了AIDL的形式,所以这里专门学习一下这个AIDL的用法简介AIDL是Android中IPC的一种方式,同样的还有理由共享文...【详细内容】
2019-09-26  Tags: Android AIDL  点击:(192)  评论:(0)  加入收藏
▌简易百科推荐
今天面试遇到同学说做过内存优化,于是我一般都会问那 Bitmap 的像素内存存在哪?大多数同学都回答在 java heap 里面,就比较尴尬,理论上你做内存优化,如果连图片这个内存大户内存...【详细内容】
2021-12-23  像程序那样思考    Tags:Android开发   点击:(8)  评论:(0)  加入收藏
Android logcat日志封装logcat痛点在Android开发中使用logcat非常频繁,logcat能帮我们定位问题,但是在日常使用中发现每次使用都需要传递tag,并且会遇到输出频率很高的log,在多...【详细内容】
2021-12-22  YuCoding    Tags:Android   点击:(8)  评论:(0)  加入收藏
对项目的基本介绍 1.整个框架主要是给MVVM框架使用的,自己写完interface接口后,通过自定义的注解就能自动生成接口方法 2.用Kotlin的Flow去代替Rxjava,因为我发现RxJava功能很...【详细内容】
2021-12-08  网易Leo    Tags:Android开发   点击:(17)  评论:(0)  加入收藏
前言在Android开发过程中,有些时候会根据需要引用别的项目到当前项目里面,而且以Module形式引用。所以本篇博文就来分享一下怎么以Module形式引用别的项目到当前项目中,方便开...【详细内容】
2021-12-07  网易Leo    Tags:Android开发   点击:(22)  评论:(0)  加入收藏
作者:fundroid这篇文章偏阅读一些,大家可以了解下 Android 的一些最新动向。每年9/10月份 Google 都会举行约为期2天的 Android Dev Summit,在活动上 Google 的技术专家们会分...【详细内容】
2021-11-30  像程序那样思考    Tags:Android开发   点击:(15)  评论:(0)  加入收藏
一、 准备工作1、安装JDK,下载地址(可能需要一个oracle账号,大家百度一下或者自行注册一个就行。尽可能选择8或者11,这两个是长期版本)Java SE | Oracle Technology Network | Or...【详细内容】
2021-11-23  永沧    Tags:Android   点击:(28)  评论:(0)  加入收藏
使用Maven Publish Plugin插件。(官方支持)一、在Library的build.gradle中配置plugins { id 'com.android.library' id 'kotlin-android' id 'k...【详细内容】
2021-11-05  羊城小阳    Tags:Android   点击:(37)  评论:(0)  加入收藏
谷歌离推出Play Store应用程序的新数据隐私部分又近了一步。应用程序开发人员现在可以通过谷歌在Play控制台的新 "数据安全表 "填写相关细节。该公司表示,所需信息将从2022年...【详细内容】
2021-10-20    中关村在线  Tags:安卓   点击:(58)  评论:(0)  加入收藏
架构究竟是什么?如何更好的理解架构?我们知道一个APP通常是由class组成,而这些class之间如何组合,相互之间又如何产生作用,就是影响这个APP的关键点。细分的话我们可以将其分为类...【详细内容】
2021-09-17  像程序那样思考    Tags:Android架构   点击:(52)  评论:(0)  加入收藏
概述当Android应用程序需要访问设备上的敏感资源时,应用程序开发人员会使用权限模型。虽然该模型使用起来非常简单,但开发人员在使用权限时容易出错,从而导致安全漏洞。本文中,...【详细内容】
2021-09-07  SecTr安全团队    Tags:Android开发   点击:(66)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条