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

来源:互联网 发布:华夏域名注册 编辑:程序博客网 时间:2024/05/22 10:33
Android Service详解(六)---绑定服务BoundService详解之AIDL的自定义属性使用

这是第六篇文章主要讲的是BoundService中用AIDL实现IPC,自定义属性的使用,上篇博客已经说明了AIDL应该如何使用,但是如果想传入一个自定义的类的时候怎么办呢?那么这篇博客将对这种情况进行详细描述
回顾:
Android Service详解(一)---概述和StartService
Android Service详解(二)---StartService
Android Service详解(三)---IntentService
Android Service详解(四)---绑定服务BoundService详解之扩展Binder类
Android Service详解(五)---绑定服务BoundService详解之AIDL的使用

废话不多说了,直接上步骤,前期的步骤上篇博客已经说明了,这篇是对上篇博客的扩展
1.新建一AIDL文件,并与你即将定义的类型名字相同,例如Person.aidl
2.新建一个类Person.java,并将实现类的get,set方法
3.实现Parcelable类和其方法
(1)writeToParcel()方法中写入属性
@Overridepublic 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.aidlpackage com.lw.myboundservice_ipc;parcelable Person;

5.在上一个aidl文件种导包
// MyAidl.aidlpackage com.lw.myboundservice_ipc;import com.lw.myboundservice_ipc.Person;// Declare any non-default types here with import statementsinterface 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 0
原创粉丝点击