IPC机制

含义IPC就是Intent-Process Communication的缩写,含义为进程间通信或者跨进程通信是指两个进程间进行数据交换的过程.

进程和线程

线程是CPU调度的最小单位,同时线程也是一种有限的系统资源.

进程指一个执行单元在设备上表示一个应用.
一个进程可以包含多个线程,进程与线程是一种包含与被包含的关系

使用多进程的情况

一个应用可能因为某些自身原因,可能是某些模块需要运行在单独的进程或者为了加大能使用的内存所以需要多进程来获取多份内存android对单个应用能使用的最大内存做了限制以前是16M不同设备可能不一样

开启多进程

正常情况下多进程指一个应用中存在多个进程的情况.

在android中使用多进程只有一种方式,那就是给四大组件在AndroidMenifest中指定android:processs属性除此之外没有别的方法,也就是说我们无法给一个线程或者一个实体类指定其运行时所在的进程.

非常规的多进程方法:通过JNI在native层去fork一个新的进程

进程名以":“开头的进程属于当前进程的私有进程,其他应用的组件不可以和他跑在同一个进程中,而进程名不以”:"开头的进程属于全局进程,其他应用通过sharedUID方式可以和它跑在同一进程中

**SharedUID:**需要两个应用需要想用的sharedUID并且签名相同才可以,这种情况下他们可以互相访问对方的私有数据比如data目录,组件信息等

多进程运行机制

android会为每一个应用分配一个独立的虚拟机或者说为每一个进程都分配一个独立的虚拟机,不同虚拟机在内存分配上有不同的地址空间,这就导致不同的虚拟机中访问同一个类的对象会产生多份副本,
所有运行在不能进程的四大组件,只要他们之间需要通过内存来共享数据,都会共享失败.多进程带来的影响:

  1. 静态成员和单例模式的完全失效
  2. 线程同步机制失效
  3. SharedPreferences的可靠性降低(不同进程并发读写可能会造成数据丢失)
  4. Application会多次创建

多进程模式中,不同的进程的组件的确会拥有独立的虚拟机,Application以及内存空间

实现跨进程通信的方式

  • 通过Intent传递数据
  • 共享文件和SharedPreferences
  • 基于Binder的Messenger和AIDL以及Socket
Serializable

介绍serializable是java提供的一个序列化接口,是一个空接口,为对象提供标注的序列化和反序列化操作

使用想要一个对象实现序列化,只需要这个类实现Serializable接口并声明一个serialVersionUID即可.甚至这个字段也不是必须的,不声明UID同样可以实现序列化,但是会对反序列化产生影响

SerialVersionUID用来辅助序列化和反序列化的过程,原则上序列化后的数据UID只有和当前类的UID相同才能正常的被反序列化,他的工作机制是这样的:序列化的时候系统会把当前类的UID写入序列化的文件中(也可能是其他中介),当反序列化的时候系统回去检测文件中的UID,看他是否和当前类的UID一直,如果一致就说明序列化类的版本和当前类的版本是相同的可以反序列化成功.我们手动去指定它以后可以避免反序列化过程的失败.

静态成员变量属于类不属于对象,不参与到序列化的过程

用transient关键字标记的成员变量不参与序列化的过程

进程间通信方式
Bundle
  • 优点 简单易用
  • 缺点 只能传输bundle支持的数据类型
  • 适用场景 四大组件间的进程间通信
文件共享
  • 优点 简单易用
  • 缺点 不适合高并发场景,并且无法做到进程间的即时通信
  • 适用场景 无并发访问情形,交换简单的数据实时性不高的场景
AIDL
  • 优点 功能强大支持一对多并发通信,支持实时通信
  • 缺点 使用稍复杂,需要处理好线程同步
  • 适用场景 一对多且有RPC需求
Messenger
  • 优点 功能一般,支持一对多并发通信,支持实时通信
  • 缺点 不能很好处理高并发情形,不支持RPC,数据通过Message进行传输,因此只能传输Bundle支持的数据类型
  • 适用场景 低并发的一对多即时通信,无RPC需求,或者无需返回结果的RPC需求
ContentProvider
  • 优点 在数据源访问方面功能强大,支持一对多并发数据共享,可通过CALL方法扩展其他操作
  • 缺点 可以理解为受约束的AIDL,主要提供数据源的CRUD操作
  • 适用场景 一对多的进程间的数据共享
Socket
  • 优点 功能强大,可以通过网络传输字节流,支持一对多并发实时通讯
  • 缺点 实现细节稍微有点繁琐,不支持直接的RPC
  • 适用场景 网络数据交换
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值