实现客户端添加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的更多相关文章

  1. android -------- android studio 中设置创建类时的说明信息(包含 作者 ,创建时间,注释说明等)

    今天简单来说一下android studio开发工具中的 一个小设置功能: 在开发过程中我们习惯给新建的类添加一些注释信息,创建日期.时间和作者等. 设置信息 File—>Settings—&g ...

  2. android studio 中的编码问题

    在 Android studio 中直接创建项目和导入其他项目都会有一个文件编码设定的问题,在 android studio (version 1.2.0)中设置文件的编码,只需要两步: 1.打开Se ...

  3. Android studio 中创建AIDL Service

      1.概述  AIDL在android系统中的作用 AIDL,Android Interface definition language的缩写,它是一种android内部进程通信接口的描写叙述语言, ...

  4. Android IPC机制(三)在Android Studio中使用AIDL实现跨进程方法调用

    在上一篇文章Android IPC机制(二)用Messenger进行进程间通信中我们介绍了使用Messenger来进行进程间通信的方法.可是我们能发现Messenger是以串行的方式来处理client ...

  5. Android Studio中创建Kotlin For Android项目

    Kotlin俗称Android中的Swift,它是Jetbrains公司开发的基于JVM的一门语言,JetBrains公司可能大家并不熟悉,不过相信IntelliJ IDE大家一定知道,Android ...

  6. Android实验一(在Android Studio中创建项目和模拟器)

    北京电子科技学院(BESTI) 实     验    报     告 课程:移动平台开发         班级:1592 姓名:苏泽楠 学号:20159207 成绩:             指导教师 ...

  7. 在Android Studio中创建项目和模拟器

    北京电子科技学院 实      验      报      告 课程:移动平台应用开发实践  班级:201592  姓名:杨凤  学号:20159213 成绩:___________  指导老师:娄嘉 ...

  8. Mac系统下,在android studio中使用Github版本管理

    1.下载并安装github客户端http://git-scm.com/download/ 2.打开android studio,测试github是否使用ok 点击"test",如果 ...

  9. 在Android Studio 中正确使用adil ”绝对经典“

    今天调用远程服务中遇到了一个问题,哎,调了2个小时,后来终于解决,总结来看还是对新的Android Studio 不够熟悉.那么....就可以睡觉啦!!! 在Android Studio中使用进程通信 ...

随机推荐

  1. ASP.NET MVC学习之路由篇

    约束路由 上面我们有一个{id}用来捕获参数的,但是你也发现了它可以捕捉任何字符串等等,但是我们有时需要限制它,比如让它只能输入数字,那么我们就可以使用正则表达式去约束它. 如下修改RouteConf ...

  2. uva 123 Searching Quickly

     Searching Quickly  Background Searching and sorting are part of the theory and practice of computer ...

  3. chapter 1 Number/Adventurous Person

    part1: 1- Which would be easier to remember a munber or a name? Well, I am better at remembering num ...

  4. SQL Server 与内存相关的术语

    术语 1. virtual address space 虚拟地址空间 它是一个应用程序可以访问的最大地址空间.32位机上是4G(2^32).虚拟地址空间中的数据不一定在物理内存里.可能在缓存文件中. ...

  5. python学习day10

    目录 Twisted Redis RabbitMQ   Twisted   事件驱动 事件驱动分为两个部分:第一,注册事件:第二,触发事件. 自定义事件启动框架,命名为:"弑君者" ...

  6. Windows提供了两种将DLL映像到进程地址空间的方法

    调用DLL,首先需要将DLL文件映像到用户进程的地址空间中,然后才能进行函数调用,这个函数和进程内部一般函数的调用方法相同.Windows提供了两种将DLL映像到进程地址空间的方法: 1. 隐式的加载 ...

  7. emacs使用指南

    上大学的时候使用过几个简单的命令,用上windows后除了dos很少用命令行处理问题.现在MBP在手不用用emacs多可惜啊. 我上午搜索了下资料,都说emacs是神器,但是神不神看个人啦.这东西也不 ...

  8. SQLCLUSTER sql数据库监测工具

    SQLCLUSTER sql数据库监测工具

  9. centos curl web站点监控实践

    1,监控给定web站点的状态--站点请求返回代码,下载整个web站点页面文本到-o 指定的文本 curl -o /dev/null -s-silent -w--wirte-out "%{ht ...

  10. DisplayMetircs 类

    Android 可设置为随着窗口大小调整缩放比例,但即便如此,手机程序设计人员还是必须知道手机屏幕的边界,以避免缩放造成的布局变形问题. 手机的分辨率信息是手机的一项重要信息,很好的是,Android ...