AIDL
-
Android 接口通信语言;
-
AMS:ActivityManagerService系统服务——四大组件管理服务
-
android是消息驱动机制;
-
Adnroid ipc通讯是通过binder进行通信,按照binder的规矩去进程通信,且binder代码多,而aidl则是帮助我们来写代码;
-
需要序列化——parcelable
-
由于不同的进程有着不同的内存区域,并且它们只能访问自己的那一块内存区域,所以我们不能像平时那样,传一个句柄过去就完事了——句柄指向的是一个内存区域,现在目标进程根本不能访问源进程的内存,那把它传过去又有什么用呢?所以我们必须将要传输的数据转化为能够在内存之间流通的形式。这个转化的过程就叫做序列化与反序列化。
简单来说是这样的:比如现在我们要将一个对象的数据从客户端传到服务端去,我们就可以在客户端对这个对象进行序列化的操作,将其中包含的数据转化为序列化流,然后将这个序列化流传输到服务端的内存中去,再在服务端对这个数据流进行反序列化的操作,从而还原其中包含的数据——通过这种方式,我们就达到了在一个进程中访问另一个进程的数据的目的。
-
Parcelable和Serializable的作用、效率bai、区别及选择:
1、作用Serializable的作用是为了du保存对象的属zhi性到本地文件、dao数据库、网络流、rmi以方便数据传输,当然这种传输可以是程序内的也可以是两个程序间的。而Android的Parcelable的设计初衷是因为Serializable效率过慢,为了在程序内不同组件间以及不同Android程序间(AIDL)高效的传输数据而设计,这些数据仅在内存中存在,Parcelable是通过IBinder通信的消息的载体。从上面的设计上我们就可以看出优劣了。
2、效率及选择Parcelable的性能比Serializable好,在内存开销方面较小,所以在内存间数据传输时推荐使用Parcelable,如activity间传输数据,而Serializable可将数据持久化方便保存,所以在需要保存或网络传输数据时选择Serializable,因为android不同版本Parcelable可能不同,所以不推荐使用Parcelable进行数据持久化。
-
-
Client->bindService->Service返回IBinder->Client拿到Binder可以像同进程一样调用;(搞清楚)
-
aidl自动生成代码
- 数据 Clien—Service
- proxy(发送数据,进站口)和Stub(接收数据,出站口)
- service和client的接口方法一样,因此将方法写成code,通过code来访问。性能提升
onTransact
-
类加载机制
-
binder service 跨了6次进程