IPC机制
- IPC简介
Inter-Process Communication 进程间通信/跨进程通信----指两个进程间进行数据交换的过程。
Android中进程间通信的方式是通过Binder方式
- Android开启多进程方式
- 给四大组件在AndroidManifest中指定android:process属性
- 通过JNI在native层fork一个新的进程(不常用)
- 进程名以:开头的进程属于当前应用的私有进程,其他应用的组件不可以和它跑在同一个进程中,
- 进程名不以:开头的进程属于全局进程,其他应用通过ShareUID的方式可以和它跑在同一个进程中,需要两个应用有相同的ShareUID和签名,这样他们就可以互相访问私有数据。
- 多进程的问题
一个静态变量,在不同进程中修改它的值,不会同步到其他进程中,每个进程只会持有该静态变量的副本。
多进程会带来的问题Android为每个应用分配一个独立的虚拟机,或者说每个进程分配一个独立的虚拟机,不同的虚拟机在内存地址分配上有独立的地址空间,这就会使在不同的虚拟机中访问同一个对象会产生多个副本
- 实现跨进程通信的方式举例:
Intent传输数据,共享文件和sharedpreference,基于Binder的Messenger,AIDL和Socket
- 序列化Serializable中有个SerialVersionUID,作用:该id被序列化到文件中,当反序列化时,会取出该id与当前类的id比较,如果不一样,表示类中的属性发生了变化,一般是编译器自己通过hash计算生成,如果手动指定,则修改类不会报错。
- 静态成员变量属于类,不属于变量,不会参与序列化
- 用transient标记的变量不参与序列化过程
- Parcelable接口
一个类只要实现该接口,就可以实现序列化并通过Intent和binder传递
- List Map也可以序列化,前提是内部元素可序列化
- Parcelable主要用在内存序列化上
- AIDL自动生成的java文件 p48
-
Binder的工作机制p50
Binder的工作机制
- 通过给Binder设置死亡代理,linkToDeath和unLinkToDeath p60
- 各种AIDL实现的优缺点及使用场景
网友评论