但使书种多,会有岁稔时。这篇文章主要讲述Android进阶AIDL使用自定义类型相关的知识,希望能为你提供帮助。
原文首发于微信公众号:jzman-blog上篇文章 中主要介绍从 AIDL 的使用方式以及 android 开发中不同进程之间的通信,遗留的问题是如何在 AIDL 中使用自定义类型,具体步骤如下:
- 创建自定义类型
- 声明自定义类型
- 定义与自定义类型相关的业务
- 重写业务实体类
- 远程调用
- 验证 AIDL
// 自定义类型
public class Work implements Parcelable {
private String title;
private String content;
// getter、setter、Parcelable 省略
}
2. 声明自定义类型【Android进阶AIDL使用自定义类型】创建一个 .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 双屏异显的实现
- 使用 application.properties 中配置的属性,举例(@Value("${server.port}"))
- uni-app快速上手
- Android-打包AAR步骤以及最为关键的注意事项!
- android开发环境之SDK文件夹下的所需内容
- 什么是uni-app?
- PouchDB删除批处理示例
- PouchDB安装详细步骤图解
- PouchDB删除附件实例