自动搜索与彻底删除私密信息APP--(四)AIDL

AIDL:
android interface definition language :android接口定义语言
C/S端可以由它定义的编程接口来达成共识!!(类似于anstract 与Interface一样,一种编程规范??存在的理由之一??),进行跨进程通信。在Android系统中,不同进程不可以访问互相之间的内存数据。为了实现互相访问,进程需要把对象分解成操作系统可以理解的原生数据,在跨越进程的边界后在组装起来。(类似于传递的实现了Parcelable接口的类,可以看做操作系统可以识别的元数据?)。AIDL自动进行了数据的序列化和反序列化。C/S端AIDL文件必须一致,不然会解析错误,返回错误的期望值。
oneway 关键字的使用:当接口使用oneway关键字修饰时,表示接口在远程调用时是不会block的,即接口调用时发送完transaction数据后立即返回而不会等待远端的结果。注意,这只针对IPC的调用,同样的接口如果是在同一进程内部被调用的话,oneway关键字不起任何效果,方法该阻塞就阻塞(所以是阻塞了,最后调用的onGetStatsCompleted??)
Parcelables:
Interface for classes whose instances can be written to and restored from a Parcel. Classes implementing the Parcelable interface must also have a static field called CREATOR, which is an object implementing the Parcelable.Creator interface.
可以通过parcel存储实现了Parcelable接口的类实例,可以将数据写入和存取入parcel,必须实现Parcelable.Creator接口
Parcel:(可以将Parcel看作一个流,通过writeToParcel()将对象写入流中,在通过creatFramParcel()将对象读出,因此读写的顺序必须一致)
对于Android来说传递复杂类型,主要是将自己的类转换为基础的字节数组,Activity之间传递数据是通过Intent实现的。 Android序列化对象主要有两种方法,实现Serializable接口、或者实现Parcelable接口。实现Serializable接口是Java
SE本身就支持的,而Parcelable是Android特有的功能,效率比实现Serializable接口高,而且还可以用在进程间通信(IPC)中。实现Serializable接口非常简单,声明一下就可以了。而实现Parcelable接口稍微复杂一些,但效率更高,推荐用这种方法提高性能。
Parcelable接口的作用:实现了Parcelable接口的实例可以将自身的状态信息(状态信息通常指的是各成员变量的值)写入Parcel,也可以从Parcel中恢复其状态。
Parcel用来完成数据的序列化传递承载信息的容器可以通过IBinder被发送,Parcel可以包含被打包的数据而且可以在另一边解开包裹通过进程间通信(使用不同的方法或则使用常用的Parceable接口,在Parcel里IBinder对象可以使另一边的IBinder代理与真正的IBinder连接。Parcel不是通常目的上的序列化原理,这个类与其合作的类Parcelable共同合作可以使任何对象放置在Parcel里,这个设计是高性能传输的IPC机制。因此,长期的存储不适合Parcel类,底层数据实现的任何改变都可能会导致旧的数据的不可读性。
大多数的基本数据操作功能是为了读写基本数据类型:writeByte(byte),writeDouble(double),redDouble()等等。数据依靠CPU 的字节传输被读取。
Parcelables:
Parcelable协议提供了机器高效但是低级的协议将对象读写到Parcels里面.你可以使用直接的方法writeParcelable(Parcelable,int)和readParcelable(ClassLoader)或者writeParcelableArray(T[],int)和readParcelableArray(ClassLoader)去读写。这些方法将任何类型的类和他们的数据写入Parcel,当稍后读取时允许合适的类加载器将其重新构造。
Parcelable也有一些方法提供了更有效率的方式:writeTypedArray(T[],int),writeTypedList(List),readTypedArray(T[],Parcelable.creator)和readTypedList(List,Parcelable.Creator).这些方法并没有将原始对象的类信息写入Parcel,相反,read方法的请求者必须知道什么类型绘通过Parcelable.Creator传递,而不是正确的构造一个新的对象去读取他的数据。为了使用更有效的方法读写单独的Parcelable 对象,你可以直接使用Parcelable.writeToParcel和Parcelable.Creator.createFromParcel
Bundles:
一个特殊的类型安全容器,对于map的异构很有价值。对于读写数据有着很好的表现,类型安全也在最后将数据内容编写进Parcel时避免了艰难的去调试类型错误。使用writeBundle(Bundle),readBundle()和readBundle(ClassLoader).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值