学习AIDL入门-传递自定义类的对象

目录

1、简介

2、Service 端

2.1  创建StudentInfo.aidl 及 StudentInfo.java

2.2 IMyAidlInterface.aidl 文件中添加对应的接口

2.3 在对应的Service 服务类中实现对应的接口

3、client端

3.1 创建StudentInfo.aidl 及 StudentInfo.java

3.2 IMyAidlInterface.aidl 文件中添加对应的接口

3.3 getStudentInfo() 调用

3.4 测试结果

4、总结


1、简介

上一篇文章中,详细说明了如何使用aidl进行开发,并提供了一个demo进行测试,如果对aidl还不了解,建议先去看看学习AIDL入门-一个简单的小demo ,本篇文章主要讲解对于自定义的类,如何通过aidl进行传递。

2、Service 端

2.1  创建StudentInfo.aidl 及 StudentInfo.java

首先创建 StudentInfo.aidl 及 StudentInfo.java两个文件,需要特别注意的是,这两个文件必须在相同的包名下,否则我们在IMyAidlInterface使用StudentInfo,编译时会出现找不到StudentInfo类的错误。类文件结构如下:

下面我们分别看看StudentInfo.aidl 及 StudentInfo.java对应的内容:

  •  StudentInfo.aidl
package com.android.study.example.aidl;

parcelable StudentInfo;
  • StudentInfo.java
package com.android.study.example.aidl;

import android.os.Parcel;
import android.os.Parcelable;

public class StudentInfo implements Parcelable {

    private String userName;
    private int userAge;

    public StudentInfo() {
    }

    protected StudentInfo(Parcel in) {
        userName = in.readString();
        userAge = in.readInt();
    }
    
    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public int getUserAge() {
        return userAge;
    }

    public void setUserAge(int userAge) {
        this.userAge = userAge;
    }

    public static final Creator<StudentInfo> CREATOR = new Creator<StudentInfo>() {
        @Override
        public StudentInfo createFromParcel(Parcel in) {
            return new StudentInfo(in);
        }

        @Override
        public StudentInfo[] newArray(int size) {
            return new StudentInfo[size];
        }
    };

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(userName);
        dest.writeInt(userAge);
    }
}

要想在aidl中对对象进行传输,该类必须实现Parcelable接口。

2.2 IMyAidlInterface.aidl 文件中添加对应的接口

package com.android.study.example;

import  com.android.study.example.aidl.StudentInfo;

interface IMyAidlInterface {

    // 计算两个数的和
    int add(int num1, int num2);

    StudentInfo getStudentInfo();

}

2.3 在对应的Service 服务类中实现对应的接口

此处代码省略。

3、client端

3.1 创建StudentInfo.aidl 及 StudentInfo.java

在client端,也需要创建对应的StudentInfo.aidl 及 StudentInfo.java, 同时这两个文件也必须在相同的包名下,但是对于在哪个包名下,是否需要与service端是否一致,并没有强制要求,通常建议在相同的包名下,代码部分与service端一致,此处省略。

3.2 IMyAidlInterface.aidl 文件中添加对应的接口

此文件代码和service端相同即可,这里不再重复粘贴。

3.3 getStudentInfo() 调用

    public void onClickShowStuInfo(View view){
        try {
            StudentInfo studentInfo = iMyAidlInterface.getStudentInfo();
            mTvShowResult.setText("name: "+studentInfo.getUserName()+"   age: "+studentInfo.getUserAge());
        } catch (RemoteException e) {
            e.printStackTrace();
        }
    }

3.4 测试结果

4、总结

通过aidl 传递自定义类的对象其实并不难,只需要在aidl文件下声明对应的类,同时在相同的包名下,创建类同时实现Parcelable接口即可。

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值