IPC 机制学习笔记

2018-12-04  本文已影响0人  Eren丶耶格尔

Android IPC 简介

IPC 是 Inter-Process Communication 的缩写,含义为进程间通信或者跨进程通信

什么是进程和线程:

按照操作系统中的描述

进程与线程之间的关系:

一个进程可以包含多个线程,因此进程和线程是包含与被包含的关系

使用多进程的情况


Android 中的多进程模式

如何开启多进程

在 Android 中使用多进程只有一种方法,那就是给四大组件在 AndroidMenifest 中指定 android:process 属性,除此之外没有其他办法

多进程模式的运行机制

当然,多进程绝非只是仅仅指定一个 android:process 属性那么简单

Android 为每一个应用分配了一个独立的虚拟机,或者说为每个进程都分配一个独立的虚拟机,不同的虚拟机在内存分配上有不同的地址空间,这就导致在不同的虚拟机中访问同一个类的对象会产生多份副本

一般来说,使用多进程会造成如下几方面的问题:
  1. 静态成员和单例模式完全失效
  2. 线程同步机制完全失效
  3. SharedPreferences 的可靠性下降
  4. Application 会多次创建

Binder(重点)

什么是 Binder

Binder 的工作原理图

Binder 的工作机制

Android 中的 IPC 方式

1.使用 Bundle

2.使用文件共享

3.使用 Messenger

Messenger 是一种轻量级的 IPC 方案,它的底层实现是 AIDL

Messenger 的工作原理图
Messenger 的工作原理.png

4.使用 AIDL

待续...

5.使用 ContentProvider

待续...

6.使用 Socket

待续...


Binder 线程池

待续...


选用合适的 IPC 方式

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

猜你喜欢

热点阅读