IPC

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

    如何实现序列化和反序列化呢?只需要采用ObjectOutputStreamObjectInputStream
    https://www.cnblogs.com/duanxz/p/3511695.html
    Parcelable
    Parcelable的方法说明.png

你可能感兴趣的:(IPC)