Android进阶AIDL使用自定义类型
2019-09-11 00:04
1761 查看
原文首发于微信公众号:jzman-blog
上篇文章 中主要介绍从 AIDL 的使用方式以及 Android 开发中不同进程之间的通信,遗留的问题是如何在 AIDL 中使用自定义类型,具体步骤如下:
- 创建自定义类型
- 声明自定义类型
- 定义与自定义类型相关的业务
- 重写业务实体类
- 远程调用
- 验证 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
日志运行截图如下:
使用流程实际上在上篇文章中已经阐述清楚了,这篇貌似有点多余,不过算是对过去知识的总结吧!
相关文章推荐
- 【Android】使用AIDL传递用户自定义类型数据--附完整示例代码
- Android 使用 AIDL 实现进程间通信,使用基本类型作为输入和输出参数
- 【android】AIDL传递自定义类型参数
- Android基础--使用AIDL实现进程间的通信之复杂类型传递
- 【Java编程高级进阶】如何使用自定义类型的异常?
- 【Android 一般进阶】android自定义属性的使用
- Android中跨进程通信方式之使用AIDL进阶篇
- 安卓aidl进阶,发送自定义类型消息
- android基本类型的自定义控件使用
- AIDL中使用自定义类型时无法导包的问题
- [Android Pro] AIDL进程间传递自定义类型参数
- Android 使用AIDL跨进程通信(二)--传递自定义对象
- Android中自定义视图View之---进阶篇(Canvas的使用)
- android aidl 自定义类型 作参数
- android aidl 自定义类型 作参数
- android aidl 自定义类型 作参数
- [Android Pro] AIDL进程间传递自定义类型参数
- Android进阶学习-Canvas使用7行代码自定义圆形头像
- Android进阶之使用自定义的字体库