IPC是Inter-Process Communication的缩写,含义为进程间通信,是指两个进程之间进行数据交换的过程。
在Android中主线程也叫UI线程,在UI线程里才能操作界面元素。(注意,不能在主线程中执行耗时操作,不然会出现ANR问题,即应用无响应)。
在android中最具有特色的进程间通信方式就是Binder了,除此之外android还支持Socket。
多进程的情况:
-
自身原因。如通过多进程来获取多份内存空间。
-
当前应用需要向其他应用获取数据时。
在android中使用多进程只有一种方法,那就是通过android:process属性,开启多进程模式。(特殊情况,通过JNI在native层fork一个新的进程)
在多进程模式中,不同进程的组件拥有独立的虚拟机,application以及内存.
- 麻烦点:所有运行在不同进程中的四大组件,只要它们之间需要通过内存来贡献数据,都会共享失败
- 静态成员和单列模式完全失效。
- 线程同步机制完全失效。
- sharedPreferences的可靠性下降
- Application会多次创建
先了解Serializable和Parcelable接口完成对象的序列化过程
Serializable
- 当实现java.io.Serializable接口的类没有显式地定义一个serialVersionUID变量时候,Java序列化机制会根据编译的Class自动生成一个serialVersionUID作序列化版本比较用,这种情况下,如果Class文件(类名,方法明等)没有发生变化(增加空格,换行,增加注释等等),就算再编译多次,serialVersionUID也不会变化的。如果我们不希望通过编译来强制划分软件版本,即实现序列化接口的实体能够兼容先前版本,就需要显式地定义一个名为serialVersionUID,类型为long的变量,不修改这个变量值的序列化实体都可以相互进行串行化和反串行化。(一般都需要指定,不然改动都会导致系统重新计算当前类的hash值并把它赋值给serialVersionUID)
Serializable.png
如何实现序列化和反序列化呢?只需要采用ObjectOutputStream
和ObjectInputStream
https://www.cnblogs.com/duanxz/p/3511695.html
Parcelable
Parcelable的方法说明.png
网友评论