Android IPC多进程通信总结

本文介绍了Android中进程间通信(IPC)的基本概念及应用场景,探讨了序列化的必要性,并对比了Serializable与Parcelable接口的不同之处。此外,还详细解释了Binder机制及其在Service中的应用,以及Android提供的多种IPC方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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:网络数据交换的常用方式。不推荐使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值