Android Studio中如何创建AIDL
实现客户端添加Book,Service接收并打印出书籍信息
一、创建Book类
1.创建文件夹(本文命名为aidl)

2.创建Book类并继承Parcelable接口(原因:AIDL只能传送继承Parcelable接口的类)
详见:第二章——Parcelable接口的使用(跨进程,Intent传输)
二.创建AIDL文件夹与Book.aidl
用AIDL File填写名字的时候先随便填写(因为如果直接填Book为名字时候会报错,只有先创建完之后再RENAME才不会报错)

之后变成

为什么要有Book.aidl类,因为只有将类在aidl中声明时候,AIDL才能调用Book类,接下来为如何声明

所以说要让AIDL能够传送自定义类需要 ①继承Parcelable接口 ②创建同名.aidl文件声明自己。
三、创建IBookManager.aidl(作用:设置让客户端允许调用的接口)

四、分析Binder的运行原理
注:Stub对象可以理解为Binder类
1.系统会自动生成IBookManger.java文件在

分析其属性和方法
DESCRIPTOR:Binder的唯一表标识,"一般用类名表示"
asInterface(IBinder obj):将服务端的Binder对象转成客户端的所需的AIDL对象。
①:若客户端与服务端在同一进程则返回服务端的Stub本身。
②:若客户端与服务端在不同进程则返回的是Stub.proxy对象。
asBinder():返回当前的Binder对象
onTransact():当客户端发起跨进程请求时,会调用此方法,返回Stub.proxy
Proxy#getBookList():我们刚才创造的接口。
运行原理:

好了,运行原理和创建方式就到这里。
五、AIDL支持的数据类型
String、Char、基本数据类型、List、Map、Parcelable
六、AIDL文件中 in类型out类型和inout数据的区别
1.只有AIDL支持的数据类型不需要,其他类型的参数必须要加上参数。
in:客户端的参数输入;
解析:是把实参的值赋值给行参 那么对行参的修改,不会影响实参的值
out:服务端的参数输入;
解析:传递以后,行参和实参都是同一个对象,只是他们名字不同而已,对行参的修改将影响实参的值
inout:这个可以叫输入输出参数,客户端可输入、服务端也可输入。客户端输入了参数到服务端后,服务端也可对该参数进行修改等,最后在客户端上得到的是服务端输出的参数。
分析in类型和out类型以及调用Proxy#getBookList()的运作流程
假设getBookList()有in、out类型 如:getBookList(in Book book,out String[] str);
当客户端远程调用此方法的时候
①:创建该方法需要的输入类型Parcel对象_data(这里为Book),输出类型(这里为str),和返回值对象(这里为List),写入data中
②:调用transact发起RPC(远程调用请求),挂起当前线程(客户端的)
③:调用服务端的onTransact(),直到RPC返回结果,从_reply中取出PRC返回结果
④:最后返回_reply的数据(个人认为这里就是将返回的_reply的值给客户端的str) 导致服务器端修改行参将影响实参的值
Android Studio中如何创建AIDL的更多相关文章
- android -------- android studio 中设置创建类时的说明信息(包含 作者 ,创建时间,注释说明等)
今天简单来说一下android studio开发工具中的 一个小设置功能: 在开发过程中我们习惯给新建的类添加一些注释信息,创建日期.时间和作者等. 设置信息 File—>Settings—&g ...
- android studio 中的编码问题
在 Android studio 中直接创建项目和导入其他项目都会有一个文件编码设定的问题,在 android studio (version 1.2.0)中设置文件的编码,只需要两步: 1.打开Se ...
- Android studio 中创建AIDL Service
1.概述 AIDL在android系统中的作用 AIDL,Android Interface definition language的缩写,它是一种android内部进程通信接口的描写叙述语言, ...
- Android IPC机制(三)在Android Studio中使用AIDL实现跨进程方法调用
在上一篇文章Android IPC机制(二)用Messenger进行进程间通信中我们介绍了使用Messenger来进行进程间通信的方法.可是我们能发现Messenger是以串行的方式来处理client ...
- Android Studio中创建Kotlin For Android项目
Kotlin俗称Android中的Swift,它是Jetbrains公司开发的基于JVM的一门语言,JetBrains公司可能大家并不熟悉,不过相信IntelliJ IDE大家一定知道,Android ...
- Android实验一(在Android Studio中创建项目和模拟器)
北京电子科技学院(BESTI) 实 验 报 告 课程:移动平台开发 班级:1592 姓名:苏泽楠 学号:20159207 成绩: 指导教师 ...
- 在Android Studio中创建项目和模拟器
北京电子科技学院 实 验 报 告 课程:移动平台应用开发实践 班级:201592 姓名:杨凤 学号:20159213 成绩:___________ 指导老师:娄嘉 ...
- Mac系统下,在android studio中使用Github版本管理
1.下载并安装github客户端http://git-scm.com/download/ 2.打开android studio,测试github是否使用ok 点击"test",如果 ...
- 在Android Studio 中正确使用adil ”绝对经典“
今天调用远程服务中遇到了一个问题,哎,调了2个小时,后来终于解决,总结来看还是对新的Android Studio 不够熟悉.那么....就可以睡觉啦!!! 在Android Studio中使用进程通信 ...
随机推荐
- mysql数据库数据恢复方案概括总结
方案一:(传统方案) 备份+binlog日志增量: 方案二:(针对update.delete语句忘加where的情况) Binlog日志文件中保存有错误操作之前和之后的两组数据,将错误操作之前的数据修 ...
- mysql 时间戳按指定格式(Y-m-d)取出
之前做采集脚本,把采集的时间按unix时间戳的形式取出 那么在写sql语句的时候,需要按时间查询相应的记录,页面传进来的$time 是'2014-01'之类的字符串,那么怎么写sql呢 $sql ...
- 用jquery制作加载条
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- spring:ContextLoaderListener接口
在启动Web容器时,自动装配Spring applicationContext.xml的配置信息. 因为它实现了ServletContextListener这个接口,在web.xml配置这个监听器,启 ...
- php的多线程使用
PHP 5.3 以上版本,使用pthreads PHP扩展,可以使PHP真正地支持多线程.多线程在处理重复性的循环任务,能够大大缩短程序执行时间. 在liunx下的安装 准备工作: 1.下载Threa ...
- Python爬虫实战(4):豆瓣小组话题数据采集—动态网页
1, 引言 注释:上一篇<Python爬虫实战(3):安居客房产经纪人信息采集>,访问的网页是静态网页,有朋友模仿那个实战来采集动态加载豆瓣小组的网页,结果不成功.本篇是针对动态网页的数据 ...
- 红外遥控系统原理及单片机软件解码程序,我的编写经历(C版本)
应该说现在每一块开发板都带有红外模块,并且大都配置了相应的程序.但其实自己动手写解码程序,更能锻炼自己所学,且不谈程序写的如何,这个过程中肯定是受益良多的.现在我就把我花一下午写出的解码程序与大家分享 ...
- QT中嵌入SDL
原地址:http://www.qtcn.org/bbs/read.php?tid=23926 前段时间在做一个音视频编码板卡的PC跨平台程序,使用QT框架,其中有块功能是往QT里嵌入SDL,来播放YU ...
- QT:浮动的饼状统计图(自绘不规则窗口)
昨天在玩手机游戏时,见到一个游戏的饼状投票统计图很漂亮,所以我今天也花了一个下午来实现了一个类似的程序娱乐一下,呵呵. 思路:1:将窗体设为Qt::FramelessWindowHint和Qt::WA ...
- 深入理解MFC子类化
子类化,通俗来讲就是用自己的窗口处理函数来处理特定消息,并将自己其他消息还给标准(默认)窗口处理函数.在SDK中,通过SetWindowLong来指定一个自定义窗口处理函数:SetWindowLong ...