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

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

1. 创建自定义类型

2. 声明自定义类型

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

4. 重写业务实体类

5. 远程调用

6. 验证 AIDL

1. 创建自定义类型

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

// 自定义类型
public class Work implements Parcelable {
private String title;
private String content;
// getter、setter、Parcelable 省略
}

2. 声明自定义类型

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

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

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

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

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

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

4. 重写业务实体类

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

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

5. 远程调用

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

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

6. 验证 AIDL

日志运行截图如下:

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

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

最新文章

  1. OpenCV2学习笔记(一)
  2. AI第二次作业
  3. ACM/ICPC 之 快排+归并排序-记录顺序对(TSH OJ-LightHouse(灯塔))
  4. 设计模式:命令模式(Command)
  5. UCloud内核热补丁技术揭秘
  6. Ov
  7. Mysql数据库常用的命令 数据备份 恢复 远程
  8. mootools和jquery冲突的解决
  9. Java缓存学习之二:浏览器缓存机制
  10. 转: 解决MSYS2下的中文乱码问题
  11. 精益创业之父Steve Blank: 怎样让企业内部创新获得50倍增速
  12. 模块化规范Common.js,AMD,CMD
  13. win10 uwp smms图床
  14. node入门笔记
  15. CTF---安全杂项入门第二题 A记录
  16. WebSocket 快速开始
  17. web版ssh的使用
  18. OpenWrt启动过程分析+添加自启动脚本【转】
  19. Java——IO类,字节流缓冲区
  20. Flask视图函数与普通函数的区别,响应对象Response

热门文章

  1. 前端小微团队的Gitlab实践
  2. webpack安装问题
  3. GCC 特性整理
  4. Redis05——Redis Cluster 如何实现分布式集群
  5. go中处理各种请求方式以及处理接口请求参数
  6. [CSP初赛] 组合数学的三个技巧以及从另一方面思考组合类问题
  7. vscode配置里关于 eslint配置不要有 "eslint.alwaysShowStatus": true
  8. vs 如何将dll打包到exe中
  9. ReentrantReadWriteLock源码探究
  10. 【简说Python WEB】Flask应用的文件结构