Android AIDL

AIDL :Android Interface Defination Language (Android 接口定义语言)

主要用于实现跨进程之间的通信
基本实现:
1.进程1 定义一个aidl1.aidl接口文件。 进程2定义一个相同的aidl1.aidl文件。

2.编译工程,会生成对应的gen\aidl\aidl1.java文件。

3.新建一个RemoteService extands Service ,实现 Onbind 方法。

4.在RemoteService中定义一个Binder对象,
private Binder Mybinder=new aidl1.Stub(){
//实现接口中声明的方法
}
然后在Onbind()方法中将Mybinder返回。

5.aidl 中数据的传递 支持
Byte int long float double char String
其中以下2类需要指定 in或out 表明输入或者输出
比如: List GetList(in List mlist);
List Map
Parceble(自定义类型)需要导包

6.Parceble 接口是一个将对象序列化的接口。
与此类似的还有一个接口Serializable,这是JavaSE本身支持的,而Parcelable是android特有的。

二者比较:

1)、Parcelable使用起来稍复杂点,而后者使用起来非常简单。

2)、Parcelable效率比Serializable高,支持Intent数据传递,也支持进程间通信(IPC)。

3)、Parcelable使用时要用到一个Parcel,可以简单将其看为一个容器,序列化时将数据写入Parcel,反序列化时从中取出。

4)、在使用内存的时候,Parcelable比Serializable性能高,所以推荐使用Parcelable。Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC。Parcelable不能使用在要将数据存储在磁盘上的情况,因为Parcelable在外界有变化的情况下不能很好的保证数据的持续性。尽管Serializable效率低点,但此时还是建议使用Serializable 。

如下2个方法需要实现:
序列化和反序列化的顺序必须保持一致。

@Override  
    public void writeToParcel(Parcel dest, int flags) {  
        // 序列化过程:必须按成员变量声明的顺序进行封装  
        dest.writeInt(id);  
        dest.writeString(name);  
    }  

    // 反序列过程:必须实现Parcelable.Creator接口,并且对象名必须为CREATOR  
    // 读取Parcel里面数据时必须按照成员变量声明的顺序,Parcel数据来源上面writeToParcel方法,读出来的数据供逻辑层使用  
    public static final Parcelable.Creator<Student> CREATOR = new Creator<Student>() {  

        @Override  
        public Student createFromParcel(Parcel source) {  
            return new Student(source.readInt(), source.readString());  
        }  

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

7.进程2 显示的绑定进程1中的service bindservice();
在serviceconnection的onconnected中得到 Ibinder实例。就可以共享进程1中的数据了。

8.aidl1 =stub.asInterface(binder)—>拿到一个服务的Proxy 代理。
调用aidl1中的方法,实际上是通过代理 transact走操作系统底层,调用另一个进程中方法的过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值