android 类型 定义,Android进阶AIDL使用自定义类型

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

阅读本篇文章之前,请先阅读 Android进阶之AIDL的使用详解 这篇文章,上一篇

中主要介绍从 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

日志运行截图如下:

1460000015640803

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

可以选择关注公众号:jzman-blog 获取最新文章更新,一起交流学习。

1460000015640804

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值