您好,登录后才能下订单哦!
密码登录
            
            
            
            
        登录注册
            
            
            
        点击 登录注册 即表示同意《亿速云用户服务条款》
        原文首发于微信公众号:jzman-blog
上篇文章 中主要介绍从 AIDL 的使用方式以及 Android 开发中不同进程之间的通信,遗留的问题是如何在 AIDL 中使用自定义类型,具体步骤如下:
自定义类型传输的就是一个实体对象,这个实体类必须实现 Parcelable 接口,具体如下:
// 自定义类型
public class Work implements Parcelable {
    private String title;
    private String content;
    // getter、setter、Parcelable 省略
}
创建一个 .aidl 文件声明刚才定义的类型,注意与具体业务 .aidl 文件的不同,声明具体如下:
// 在.aidl文件中声明自定义类型
package com.manu.aidldemo;
parcelable Work;
在定义具体业务的 .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);
}
注意:导入自定义类型,否则不识别。
由于新增了具体业务,也就是 getWorkInfo() ,需要具体业务类里面实现具体的业务,具体如下:
//新增自定义类型相关的业务
@Override
public Work getWorkInfo() throws RemoteException {
    Work work = new Work();
    work.setTitle("学习AIDL");
    work.setContent("Android developer");
    return work;
}
绑定 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();
    }
}
日志运行截图如下:
使用流程实际上在上篇文章中已经阐述清楚了,这篇貌似有点多余,不过算是对过去知识的总结吧!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。