天天看点

远端绑定Service第一篇之AIDL进程间通信1.定义aidl文件——————AIDL进程间通信

1.定义aidl文件——————AIDL进程间通信

1.AIDL的作用

    在Android平台,每个应用程序App都运行在自己的进程空间。

2.创建.aidl文件,  不同的是要显示import 复杂类型,即便复杂类型对象在同一个包内。 /当时我就没有导入,因为在一个包我认为不用导,一直说类找不到

 不需要import Java基本数据类型 (int, long, char, boolean等),String和CharSequence,集合接口类型List和Map

例子:我的aidl在同步回收站

package com.***service.aidl;
import com.***service.aidl.DeletedData;
import com.*****service.aidl.I****tManagerCallback;

interface I*****tManager {
 void ge****Data(String authority, I******rCallback callback);
 void start******tData(String authority,in List<String> ***s, I****rCallback callback);
}      

可以看见都是一个包的,还是需要导入

我的参数还有回调接口  I*******Callback

我的回调接口

package com.***e.aidl;
import com.***service.aidl.DeletedData;
import android.os.Message;

interface I******rCallback {
   void onResetResult(in List<DeletedData> del***tas);
   void onResetingResult(in Message message);
}      

看见了吗有两个类一个是DeletedData一个是Message要求是实现Parcelable哦

DeletedData 和 Message复杂的对象要写一个in

      

******************************************************************************下面是aidl自定义的类××××××××××××××××××××××××××××××××××××××××××××××××××××××

我的自定义的类 DeletedData 

1.要求一个 DeletedData.aidl

package com.*****rvice.aidl;
import com.****ervice.aidl.DeletedData;

parcelable DeletedData;
      

都是上面的格式

2. 写一个DeletedData类实现 Parcelable

package com.****service.aidl;

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

/**
 * Created **** on 15-9-21.
 */
public class DeletedData implements Parcelable {
    private String type;
 private String sourceid;
 private String title;
 private String deleteDay;
 private int group;

 public DeletedData() {
    }

    public DeletedData(Parcel pl) { //把Parel转成对象的构造函数
        this.type = pl.readString();
 this.sourceid = pl.readString();
 this.title = pl.readString();
 this.deleteDay = pl.readString();
 this.group = pl.readInt();
 }

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

    @Override
 public void writeToParcel(Parcel parcel, int i) { //把他们变成Parcel
        parcel.writeString(type);
 parcel.writeString(sourceid);
 parcel.writeString(title);
 parcel.writeString(deleteDay);
 parcel.writeInt(group);
 }

    public static final Creator<DeletedData> CREATOR = new Creator<DeletedData>() {   //有一个Creator 名字就是CREATOR
        @Override
 public DeletedData createFromParcel(Parcel var1) {
            return new DeletedData(var1);
 }

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

 public void setSourceid(String sourceid) {
        this.sourceid = sourceid;
 }

    public void setTitle(String title) {
        this.title = title;
 }

    public void setType(String type) {
        this.type = type;
 }

    public String getType() {
        return type;
 }

    public String getSourceid() {
        return sourceid;
 }

    public String getTitle() {
        return title;
 }

    public void setDeleteDay(String deleteDay) {
        this.deleteDay = deleteDay;
 }

    public String getDeleteDay() {
        return deleteDay;
 }

    public int getGroup() {
        return group;
 }

    public void setGroup(int group) {
        this.group = group;
 }
}      

**************************************客户端与服务器段的aidl都一样,直接粘贴过去即可××××××××××××××××似乎包名也要求相同××××××××××××××××××××××××××××××××××××××××××××××××××××8