IPC机制

一、学习目的:

1、理解Android多进程概念以及多进程开发模式中常见的注意事项

2、理解Android中的序列化机制和Binder

3、掌握Bundle、文件共享、AIDL、Messenger、ContentProvider和Socket等进程间通信的方式

4、理解Binder连接池的概念,掌握各种进程间通信的优缺点和使用场景

二、基础概念

1、IPC:进程间通信或者跨进程通信

2、线程:CPU调度的最小单元,是一种有限的系统资源

3、进程:一个执行单元,在PC和移动设备上指一个程序或者应用。一个进程可包含多个线程,也可只有一个线程,即主线程。Android里边UI线程也叫主线程,操作界面元素。如果进程中需要执行耗时任务,则需要开启子线程执行该任务,否则会出现ANR异常

4、IPC形式

1)、Windows:剪贴板、管道、油槽

2)、Linux:命名管道、共享内容、信号量

3)、Android:

a、Binder----进程间通信

b、Socrket----终端间通信;等

三、Android中多进程模式

1、Android多进程模式:通常指一个应用中存在多个进程的情况

1)、开启

a、常规方式:清单文件中为四大组件指定android:process属性,值为进程名,“:”开头表示在当前名称前附加包名,属于当前应用私有进程;不以“:”开头的是完整命名方式,属于全局进程,其他应用的组件可通过ShareUID方式和它跑在同一个进程。默认进程名是包名。

b、特殊方式:JNI在native层fork一个新进程,不常用。

c、Android系统会为每个应用分配唯一一个UID,具有相同UID的应用可共享数据;若应用的签名也相同,则可相互访问对方的私有数据;再通过ShareUID方式跑在同一个进程,则可以共享内存数据

2)、运行机制

a、Android为每个进程分配独立的虚拟机,对应内存上不同的地址空间,会导致四大组件在不同进程中运行时通过内存共享数据的失败。具体包括:静态成员和单利模式失效、线程同步失效、SharedPreferences可靠性下降、Application多次创建

b、一个应用的多进程相当于多个应用采用SharedUID模式

四、IPC实现跨进程共享内存数据

1、基本概念

1)、对象的序列化和持久化:

a、Serializable接口:Java中的接口,为对象提供标准的序列化和反序列化操作,使用简单但开销很大,需要大量IO操作。多用于持久化到存储设备或者通过网络传输给其他客户端时的持久化。类实现接口并声明serialVersionUID。

..............................

b、Parcelablei接口:Android中的序列化方式,通常用作内存序列化,多用于Intent和Binder传递数据时的序列化

2)Binder

a、从IPC角度来看,是一种跨进程通信方式,可理解为一种虚拟的物理设备;从Android Framework角度来说,是ServerceManager连接各种Manager和ManagerService的桥梁;从Android引用层来说,是客户端和服务端通信的媒介。

b、Android中Binder主要用于Service中,包括AIDL和Messenger。普通Service中Binder无意义,Messenger底层实现是AIDL

c、运行机制:

2、实现方式

1)、Bundle

2)、文件共享:SharedPreferences由于存在缓存策略,不建议使用

3)、Messenger:信使,实现在不同进程间传递Message对象,Message中存放数据,从而实现数据传递

a、服务端进程

b、客户端进程 

4)、AIDL:

5)、ContentProvider

6)、Socket

3、Binder连接池

4、IPC方式选择

名称 优点 缺点 适用场景
Bundle简单易用只能传输Bundle支持的数据类型四大组件间的进程通信
文件共享简单易用不适合高并发,且不支持即使通信无并发访问情形,交换简单 的数据实时性不高的场合
AIDL功能强大,支持一对多并发通信,支持实时通信使用稍复杂,需处理线程同步一对多通信且有RPC需求
Messenger功能一般,支持一对多串行通信,支持实时通信只能传输Bundle支持的数据类型,不适合高并发,不支持RPC低并发的一对多即使通信,无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、付费专栏及课程。

余额充值