跨进程调用Service(AIDL Service)流程2(复杂数据)
来源:互联网 发布:java主方法入口 编辑:程序博客网 时间:2024/05/30 12:29
——服务端——
当Service与外部通信时,需要传递复杂数据,即Stub子类中的getxxx()方法的参数与返回值为复杂数据(以类封装的数据)时:
1.参数与返回值的java类都必须实现Parcelable接口
2.它们都要各自定义AIDL.
例如:A.aidl:
parcelable A;
B.aidl:
parcelable B;
因为它们的数据其实都在各自java类中,所以它们的AIDL定义其实只需要一行即可。
他们的java类中,例如参数类A:
public class A implements Parcelable{ ...(各属性及其getter,setter方法,构造方法及各功能方法如equals()方法等) /*实现Parcelable接口必须实现的方法*/ @override public int describeContents(){ return 0; } /*实现Parcelable接口必须实现的方法,用于将A对象的各数据写入Parcel中*/ @override public void writeToParcel(Parcel dest,int flags){ dest.writeInt(xxx); dest.writeString(xxx); ... } /*添加一个静态成员CREATOR,它实现了Parcelable.Creator接口*/ public static final Parcelabel.Creator<A> CREATOR=new Parcelable.Creator<A>(){ /*用于从Parcel中读取数据*/ @override public A createFromParcel(Parcel source){ return new A(source.readInt(),source.readString(),...);//与上面的writeToParcel方法对应 } @override public A[] new Array(int size){ return new A[size]; } }}
返回值类B与参数类A相似
Service类与前一章普通数据类似,只是Stub子类的getter方法改为复杂数据的getter方法,如:
@override public List<B> getB(A a) throws RemoteException{ return as.get(a)//as为Map<A,List<B>>集合 }
——客户端——
和上一章普通数据时相似,只是取值时略有不同(因为数据类型不同而导致处理方法略有差异)
总结:传递普通数据时,只定义了一个Stub对应的AIDL,也只需要从服务端复制这一个文件到客户端
而在复杂数据时,需要有3个AIDL文件:参数类AIDL,返回值类AIDL,Service中的Stub对应的AIDL。而在复制时,还需要把参数类和返回值类的java代码一同复制过去,所以,传递复杂数据时,共需要复制5个文件到客户端。
0 0
- 跨进程调用Service(AIDL Service)流程2(复杂数据)
- 跨进程调用Service(AIDL Service)流程1(普通数据)
- 跨进程调用 Service(AIDL Service)
- 跨进程调用Service(AIDL服务)
- 跨进程调用Service(AIDL服务)
- 跨进程调用Service(AIDL 服务)
- 跨进程调用service(AIDL)
- Android AIDL Service 跨进程传递复杂数据
- Android AIDL Service 跨进程传递复杂数据
- Android AIDL Service 跨进程传递复杂数据
- Android AIDL Service 跨进程传递复杂数据
- Android AIDL Service 跨进程传递复杂数据
- 跨进程调用Service(AIDL Service)
- 跨进程调用Service(AIDL Service)
- Android AIDL:跨进程调用Service (AIDL Service)
- android跨进程调用Service(AIDL服务)
- Android AIDL跨进程调用Service
- Android:跨进程调用Services(AIDL Service)
- 【爱分享,爱Java】一个java程序员给新入行师弟师妹的一些建议
- VC里的编码问题
- 提高篇第20-21课第三题
- 旋转数组的最小数字
- HashMap的工作原理及性能分析
- 跨进程调用Service(AIDL Service)流程2(复杂数据)
- The user specified as a definer ('res'@'%') does not exist 解决方法
- 凯云水利水电工程造价管理系统 MVC框架的搭建(一)
- 关于expdp的几个小问题
- 关于新浪微信瘦身的问题
- mysql sql 语句插入 blob字段的插入
- Perforce warning:Can't clobber writable file ...
- Spring之AOP模块
- Python 之 使用 PIL 库做图像处理