Android AIDL使用教程

    网上有很多AIDL的使用教程,但大都描述不清晰,或者仅仅说明了单向通讯的,没有很好的达到数据交
互传输的效果,也没有很好的将2个进程的程序工程独立开给同学说明方便学习和演练。因此我整理出以
下说明,供广大同学们学习及交流,作为AIDL通讯的一个入门。
    首先创建工程“aidltest”和“checkaidl”,作为两个程序,到时生成2个apk,他们之间通过AIDL方式
进行数据交互。

先讲第一个工程 “aidltest”
工程结构如下图:

具体步骤如下:

1.Person 类需要实现接口Parcelable

public class Person implements Parcelable {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }


    protected Person(Parcel in) {
        name = in.readString();
        age = in.readInt();
    }

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

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

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

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

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

2.创建aidl文件,注意aidl文件夹与java是平级关系,在main之内
  Person.aidl的包名需要与Person.java一致

// Person.aidl
package hk.newsoft.aidltest.bean;
parcelable Person;

3.创建IMyAidl.aidl文件,并在其中定义好接口方法

// IMyAidl.aidl
package hk.newsoft.aidltest;
import hk.newsoft.aidltest.bean.Person;
// Declare any non-default types here with import statements

interface IMyAidl {
    /**
     * Demonstrates some basic types that you can use as parameters
     * and return values in AIDL.
     */
//    void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat,
//            double aDouble, String aString);

    void addPerson(in Person person);
    Person getPerson();
}

4.需要Clean一下,将aidl文件生成java文件


5.创建Service用于绑定数据 “MyAidlService”

public class MyAidlService extends Service {

    private Person mPersons=null;
    private IBinder iBinder = new IMyAidl.Stub() {
        @Override
        public void addPerson(Person person) throws RemoteException {
            mPersons=person;
        }

        @Override
        public Person getPerson() throws RemoteException {
            return mPersons;
        }
    };

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return iBinder;
    }
}

6.在Activity文件中操作具体的业务逻辑,绑定Service并进行数据的交互
7.注意AndroidManifest.xml的配置

<service
    android:name="hk.newsoft.aidltest.service.MyAidlService"
    android:enabled="true"
    android:exported="true"
    android:process=":aidl">
    <intent-filter>
        <action android:name="hk.newsoft.aidltest.aidl" />
    </intent-filter>

</service>

此时运行“aidltest”工程,apk打开就可以产生数据源

再将第二个工程“checkaidl”,它用于获取工程一产生的数据,并对数据做相应的修改,把数据返给工
程一
工程结构如下图:

1.Person.aidl  IMyAidl.aidl Person.java是从工程一种复制过来,且保持包名一致
2.clean一下,将aidl文件生成java文件
3.在Activity中开启Service,并进行数据的读取、修改和交互

工程一代码:https://download.csdn.net/download/huashanjuji/10675948

工程二代码:https://download.csdn.net/download/huashanjuji/10675970

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值