27
2017
09

Android IPC多进程通信总结

IPC(Inter-Process Communication) 进程间通信,是指两个不同进程之间数据交换的过程。一般在Android程序中一个进程就是一个程序(无特别代码实现的情况下),而一个程序分配的是单独的虚拟机,一个进程可以包含多个线程。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region),那么问题来了,两个进程间如何通信呢?本章不做详细介绍如何使用,只做一个总结,如详细研究请移步。

为什么要多进程?

1、一个进程Android分配的内存有限,早些Android版本一个进程只分配16M,如果一个应用太大,那么一个进程就无法满足。

2、守护进程:防止进程被kill

3、当前应用需要向其他应用获取数据。由于是两个应用,即两个进程。

*序列化的原因?

1、永久保存对象的字节序列到本地文件中
2、使对象可以在网络中 ipc中传递

*序列化接口

1、serializable接口:实现较简单、开销大、需要大量IO操作。适合将对象序列化到存储设备、对象序列化后通过网络传输
2、parcelable接口:是Android中的序列化方式、使用麻烦、效率高 适用于内存序列化上

*Binder介绍

用途:主要用于在service中、是一种跨进程通信方式
说明:aidl底层就是binder实现的;
如果binder突然死亡:需要在linkToDeath设置一个死亡代理来重新发起连接请求恢复连接

*binder连接池

目的:避免重复创建service
原理:根据不同的bindercode返回不同的binder对象然后进行操作
更新就只需要新建aidl文件、在bindpool中添加一个新的bindercode然后返回binder对象就好了

*Android中的IPC方式

Bundle:四大组件间的进程间通信方式,简单易用,但传输的数据类型受限。
文件共享: 不适合高并发场景,并且无法做到进程间的及时通信。
Messenger: 数据通过Message传输,只能传输Bundle支持的类型
ContentProvider:android 系统提供的。简单易用。但使用受限,只能根据特定规则访问数据。
AIDL:功能强大,支持实时通信,但使用稍微复杂。
Socket:网络数据交换的常用方式。不推荐使用

上一篇:android开发笔记之APK反编译(一)ClassyShark 下一篇:React Native 第十三天