如何在 AIDL 中使用自定义类型,具体步骤如下:
创建自定义类型
声明自定义类型
定义与自定义类型相关的业务
重写业务实体类
远程调用
验证 AIDL
1. 创建自定义类型
自定义类型传输的就是一个实体对象,这个实体类必须实现 Parcelable 接口,具体如下:
1// 自定义类型2public class Work implements Parcelable {3 private String title;4 private String content;5 // getter、setter、Parcelable 省略6}
2. 声明自定义类型
创建一个 .aidl 文件声明刚才定义的类型,注意与具体业务 .aidl 文件的不同,声明具体如下:
1// 在.aidl文件中声明自定义类型2package com.manu.aidldemo;3parcelable Work;
3. 定义与自定义类型相关的业务
在定义具体业务的 .aidl 文件中定义与自定义类型相关的业务,具体如下:
1// Declare any non-default types here with import statements2import com.manu.aidldemo.Work; //注意3interface 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@Override3public 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 对象就可以调用了,具体如下:
1public 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
日志运行截图如下:
使用流程实际上在上篇文章中已经阐述清楚了,这篇貌似有点多余,不过算是对过去知识的总结吧!
最后推荐一下我的视频号,每天分享各种知识,欢迎大家关注!---END---转发至朋友圈,是绝对的真爱让我知道你在看