aidl 个人心得

来源:互联网 发布:linux解压t命令gunzip 编辑:程序博客网 时间:2024/06/15 11:57

1.与远程服务利用binder建立连接并且  binding服务 的操作需要放在 onCreate() 里面,以避免空指针。

2.传递Parcelable 对象 需要   

  public static final Parcelable.Creator<DemoParcelable> CREATOR = new                   Parcelable.Creator<DemoParcelable>() {
        public DemoParcelable createFromParcel(Parcel source) {
            DemoParcelable tp = new DemoParcelable(source);
            return tp;
        }
        public DemoParcelable[] newArray(int size) {
            return new DemoParcelable[size];
        }

    };

3.能够传递的参数

  

1.AIDL支持Java原始数据类型。

2.AIDL支持String和CharSequence。

3.AIDL支持传递其他AIDL接口,但你引用的每个AIDL接口都需要一个import语句,即使位于同一个包中。

4.AIDL支持传递实现了android.os.Parcelable接口的复杂类型,同样在引用这些类型时也需要import语句。(Parcelable接口告诉Android运行时在封送(marshalling)和解封送(unmarshalling)过程中实现如何序列化和反序列化对象,你可以很容易联想到java.io.Serializable接口。有些朋友可能会有疑问,两种接口功能确实类似,但为什么Android不用内置的Java序列化机制,而偏偏要搞一套新东西呢?这是因为Android团队认为Java中的序列化太慢,难以满足Android的进程间通信需求,所以他们构建了Parcelable解决方案。Parcelable要求显示序列化类的成员,但最终序列化对象的速度将快很多。另外要注意的是,Android提供了两种机制来将数据传递给另一个进程,第一种是使用Intent将数据束(Bundle)传递给活动,第二种也就是Parcelable传递给服务。这两种机制不可互换,不要混淆。也就是说,Parcelable无法传递给活动,只能用作AIDL定义的一部分)。

5.AIDL支持java.util.List和java.util.Map,但是有一些限制。集合中项的允许数据类型包括Java原始类型、String、CharSequence或是android.os.Parcelable。无需为List和Map提供import语句,但需要为Parcelable提供import语句。

6.非原始类型中,除了String和CharSequence以外,其余均需要一个方向指示符。方向指示符包括in、out、和inout。in表示由客户端设置,out表示由服务端设置,inout表示客户端和服务端都设置了该值。

3.利用回调callback  的aidl 将 参数再次传回 client端。

http://download.csdn.net/detail/lixiangxiang2010/8957811

0 0
原创粉丝点击