IPC的含义就是进程间通信或者跨进程通信,是指两个进程间进行数据交换的过程。
线程:线程是CPU调度的最小单元。进程是指在PC和移动设备上的一个应用或者一个程序。两者的关系是包含与被包含的关系,一个进程可以包含多个线程。
Android中进程间通信的方式是Binder,通过Binder可以轻松实现进程间的通信。通过给四大组件指定android:process属性开启多进程模式。android:process:":romote"与android:process:"包名.romote"是有区别的。以":"开头的进程属于当前应用的私有进程,其他应用组件不可以和它跑在同一个进程中;而进程名不以“:”开头的进程属于全局进程,其他应用可以通过ShareUID方式和它跑在同一个进程中。
一般使用多进程会造成以下问题:
(1)静态成员和单例模式完全失效。(2)线程同步机制完全失效。(3)SharedPreference的可靠性下降(4)Application会多次创建。
造成这些后果的原因就是:Android会为每个进程创建一个独立的虚拟机,不同的虚拟机在内存分配上会有不同的地址空间,创建不同的虚拟机就相当于重新启动应用,这就导致了在不同的虚拟机中访问同一个类的对象会产生不同的副本。sharedPerference不支持两个进程同时执行操作,否则会造成数据丢失。
序列化机制:
序列化:把对象转换成字节序列的过程称为对象的序列化。 反序列化:把字节序列恢复为对象的过程就是对象的反序列化。
Serializable与Parcelable可以实现对象的序列化。
serialVersionUID的工作机制:在序列化的时候,系统会把当前类的serialVersionUID存储到序列化后的文件当中,反序列化的时候,系统会去检测文件当中的serialVersionUID与当前类的serialVersionUID是否一致,如果一致就说明序列化类的版本与当前类的版本是相同的,就可以成功反序列化。
注意:静态成员变量属于类不属于对象,不参与序列化;用transient修饰的成员变量不参与序列化过程。
Serializable与Parcelable的区别:Serializable效率较低,使用比较简单;Parcelable效率高,使用比较麻烦。