原文首发于微信公众号:jzman-blog,欢迎关注交流!

上篇文章中主要介绍从 AIDL 的使用方式以及 Android 开发中不同进程之间的通信,遗留的问题是如何在 AIDL 中使用自定义类型,具体步骤如下:

1. 创建自定义类型

2. 声明自定义类型

3. 定义与自定义类型相关的业务

4. 重写业务实体类

5. 远程调用

6. 验证 AIDL

1. 创建自定义类型

自定义类型传输的就是一个实体对象,这个实体类必须实现 Parcelable 接口,具体如下:

  1. // 自定义类型
  2. public class Work implements Parcelable {
  3. private String title;
  4. private String content;
  5. // getter、setter、Parcelable 省略
  6. }

2. 声明自定义类型

创建一个 .aidl 文件声明刚才定义的类型,注意与具体业务 .aidl 文件的不同,声明具体如下:

  1. // 在.aidl文件中声明自定义类型
  2. package com.manu.aidldemo;
  3. parcelable Work;

3. 定义与自定义类型相关的业务

在定义具体业务的 .aidl 文件中定义与自定义类型相关的业务,具体如下:

  1. // Declare any non-default types here with import statements
  2. import com.manu.aidldemo.Work; //注意
  3. interface IPersonAidlInterface {
  4. //定义与自定义类型相关的业务
  5. Work getWorkInfo();
  6. void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat,
  7. double aDouble, String aString);
  8. }

注意:导入自定义类型,否则不识别。

4. 重写业务实体类

由于新增了具体业务,也就是 getWorkInfo() ,需要具体业务类里面实现具体的业务,具体如下:

  1. //新增自定义类型相关的业务
  2. @Override
  3. public Work getWorkInfo() throws RemoteException {
  4. Work work = new Work();
  5. work.setTitle("学习AIDL");
  6. work.setContent("Android developer");
  7. return work;
  8. }

5. 远程调用

绑定 Service 成功之后会得到 IBinder 对象,然后通过 asInterface() 获取到 IPersonAidlInterface 对象就可以调用了,具体如下:

  1. public void callRemoteClick(View view) {
  2. Log.i(TAG,"远程调用具体服务...");
  3. try {
  4. //远程调用
  5. Work work = iPersonAidlInterface.getWorkInfo();
  6. System.out.println("这是远程调用的服务信息:title="+work.getTitle()+",content="+work.getContent());
  7. } catch (RemoteException e) {
  8. e.printStackTrace();
  9. }
  10. }

6. 验证 AIDL

日志运行截图如下:

使用流程实际上在上篇文章中已经阐述清楚了,这篇貌似有点多余,不过算是对过去知识的总结吧!

如果觉得写的不妥,可以关注公众号:jzman-blog,一起交流学习。

Android进阶AIDL使用自定义类型的更多相关文章

  1. Binder AIDL中自定义类型传递的源码分析

    binder机制实现的IPC和共享内存的方式不同,它采取的是值拷贝的方式,即进程间传递的实体遵循Parcelable协议, Bp端负责向Parcel里写东西,Bn端负责从Parcel里读取还原,顺序是 ...

  2. 【Android - 进阶】之自定义视图浅析

    1       概述 Android自定义View / ViewGroup的步骤大致如下: 1) 自定义属性: 2) 选择和设置构造方法: 3) 重写onMeasure()方法: 4) 重写onDra ...

  3. Android进阶AIDL - 2018年4月14日

    参考:慕课网 --- 最后三集.Android开发艺术探索 1.在AS中创建aidl文件后,要编译一下才会在gen下生成debug文件: 2.AIDL 不支持short类型,常用的数据类型: 3.AI ...

  4. Android进阶之绘制-自定义View完全掌握(五)

    在自定义类继承View实现自定义控件的过程中,我们还应该对一些自定义属性有所了解. 我们通过一个案例来学习一下. 新建一个android项目,然后我们创建一个类MyAttributeView继承Vie ...

  5. Android开发 AIDL使用自定义对象作参数或返回值

    http://www.pocketdigi.com/20121129/952.html 默认,AIDL支持对象作参数,但需要该对象实现Parcelable接口,且aidl文件应该是该类在同一包下,需要 ...

  6. 我的Android进阶之旅------>MIME类型大全

    今天在实现一个安装apk的代码中看到一段代码为:application/vnd.android.package-archive,不知其意,所以百度了一下,了解到这是一种MIME的类型,代表apk类型. ...

  7. Android进阶之绘制-自定义View完全掌握(四)

    前面的案例中我们都是使用系统的一些控件通过组合的方式来生成我们自定义的控件,自定义控件的实现还可以通过自定义类继承View来完成.从该篇博客开始,我们通过自定义类继承View来实现一些我们自定义的控件 ...

  8. Android进阶之绘制-自定义View完全掌握(一)

    Android的UI设计可以说是决定一个app质量的关键因素,因为人们在使用app的时候,最先映入眼帘的就是app的界面了,一个美观.充实的界面能够给用户带来非常好的体验,会在用户心中留下好的印象. ...

  9. Android进阶之绘制-自定义View完全掌握(二)

    这是自定义View系列的第二篇博客,我们继续来学习关于自定义View的知识. 今天我们来实现一下广告条案例. 我们要实现的是这样的一个效果. 要想实现这样的效果,我们可以借助ViewPager控件,然 ...

随机推荐

  1. 前端的事件冒泡(例如点击一次onclick事件执行两次)解决办法

    问题概要: 当我运用antd 中 radio组件的时候发现radio组件是有bug的 就是你不能给他赋予id 和 value,同时也绑定不上onclick等事件.举个例子: 可以看到 你就算赋予了id ...

  2. python全局变量语句global

    在python中使用函数体外的变量,可以使用global语句 变量可以是局部域或者全局域.定义在函数内的变量有局部作用域,在一个模块中最高级别的变量有全局作用域. 在编译器理论里著名的“龙书”中,阿霍 ...

  3. python实验一

    安徽工程大学 Python程序设计实验报告 班级物流管理191 姓名彭艺    学号3190505139成绩          日期  2020年3月3日     指导老师    修宇 实验名称    ...

  4. ES6拓展的对象功能

    前言:因为之前看过很多的博客啊,书籍啊但是最后都雁过无痕,再问我基本没什么印象,所以就迫使自己看书的时候记点笔记,因为懒得写字[捂脸],现在是打字比写字要快好多,所以就写博客吧! ES6规范明确定义了 ...

  5. 03 Hibernate入门

    Hibernate 说明 由于JPA是sun公司制定的API规范,所以我们不需要导入额外的JPA相关的jar包,只需要导入JPA的提供商的jar包.我们选择Hibernate作为JPA的提供商,所以需 ...

  6. node打开本地应用程序

    1.打开浏览器 最简单的方法: const cp = require('child_process') cp.exec('start http://127.0.0.1:8889/'); // 自动打开 ...

  7. Spring Boot入门系列(六)如何整合Mybatis实现增删改查

    前面介绍了Spring Boot 中的整合Thymeleaf前端html框架,同时也介绍了Thymeleaf 的用法.不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/z ...

  8. python基础学习day6

    代码块.缓存机制.深浅拷贝.集合 id.is.== id: 可类比为身份号,具有唯一性,若id 相同则为同一个数据. #获取数据的内存地址(随机的地址:内存临时加载,存储数据,当程序运行结束后,内存地 ...

  9. 《自拍教程46》Python_adb自动拍照100张

    Android手机测试, 涉及照相机(Camera)应用程序的稳定性测试的用例, 需要涉及100张照片的拍照自动化测试. 准备阶段 先清理老照片,照片一般存放在/scard/DCIM目录下 adb s ...

  10. Redux的createStore实现

    Redux的createStore实现   使用过react的同学应该对Redux这个东西有所了解.他是一种全局状态管理的思想(对, 这里我觉得它是一种思想, 因为对于React来说, 其实Redux ...