Android Service详解(六)---绑定服务BoundService详解之AIDL的自定义属性使用

Android Service详解(六)---绑定服务BoundService详解之AIDL的自定义属性使用

这是第六篇文章主要讲的是BoundService中用AIDL实现IPC,自定义属性的使用,上篇博客已经说明了AIDL应该如何使用,但是如果想传入一个自定义的类的时候怎么办呢?那么这篇博客将对这种情况进行详细描述
回顾:

废话不多说了,直接上步骤,前期的步骤上篇博客已经说明了,这篇是对上篇博客的扩展
1.新建一AIDL文件,并与你即将定义的类型名字相同,例如Person.aidl
2.新建一个类Person.java,并将实现类的get,set方法
3.实现Parcelable类和其方法
(1)writeToParcel()方法中写入属性
@Override
public void writeToParcel(Parcel parcel, int i) {
    parcel.writeString(name);
    parcel.writeString(work);
}

(2)创建一个构造器,结构如下
public static final Parcelable.Creator<Person>CREATOR
        = new Parcelable.Creator<Person>(){
        public Person createFromParcel(Parcel in){
            Person p = new Person();
            p.name = in.readString();
            p.work = in.readString();
            return p;
        }

    @Override
    public Person[] newArray(int i) {
        return new Person[i];
    }
};
构造器的格式基本是这样的可以直接复制这段代码进行更改
Person类的全部代码在这里哦~
public class Person implements Parcelable {
    private String name;
    private String work;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getWork() {
        return work;
    }

    public void setWork(String work) {
        this.work = work;
    }

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

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", work='" + work + '\'' +
                '}';
    }

    @Override
    public void writeToParcel(Parcel parcel, int i) {
        parcel.writeString(name);
        parcel.writeString(work);
    }
    public static final Parcelable.Creator<Person>CREATOR
            = new Parcelable.Creator<Person>(){
        public Person createFromParcel(Parcel in){
            Person p = new Person();
            p.name = in.readString();
            p.work = in.readString();
            return p;
        }

        @Override
        public Person[] newArray(int i) {
            return new Person[i];
        }
    };
}

4.重写AIDL文件
// Person.aidl
package com.lw.myboundservice_ipc;
parcelable Person;

5.在上一个aidl文件种导包
// MyAidl.aidl
package com.lw.myboundservice_ipc;
import com.lw.myboundservice_ipc.Person;
// Declare any non-default types here with import statements

interface MyAidl {
    /**

6.然后跟传递普通变量一样尽情的使用吧
(1)在MyAidl文件中添加Person返回类型的函数
interface MyAidl {
    /**
     * Demonstrates some basic types that you can use as parameters
     * and return values in AIDL.
     */
     void setString(String str);
     String desc();
     Person getPerson();
    void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat,
            double aDouble, String aString);
}

(2)在Mainactivity调用就好
    public void callClick(View view){
        if(myAidl!=null){
            try {
                myAidl.setString("测试传递数据");
                Log.e("ceshi","是传递成功---"+myAidl.desc());
                Log.e("ceshi","自定义类型的数据获取---"+myAidl.getPerson());
            } catch (RemoteException e) {
                e.printStackTrace();
            }
        }
    }


附上渣渣源码:源码


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值