一.什么是IPC
IPC是Inter-Process Communication的缩写,含义是进程间通信和跨进程通信,是指两个进程直接进行数据交换的过程。
二.什么情况下需要使用多进程
1.一些模块因为特殊原因需要运行在单独进程中
2.Android开发时对单个应用的最大内存做了限制,为了防止主线程被杀死,可以创建 多线程来减少内存溢出
3.当前应用需要向另外一个应用获取数据
三. IPC
1. Android 中IPC有哪些方式
- Bundle:在Bundle中附加数据并通过Intent传输
- 文件共享:两个进程通过读写一个文件来交换数据
- AIDL:Android Interface Definition Language
- Messenger:基于消息的进程间通信
- ContentProvider::专门用于不同应用间的数据共享
- Socket:使用TCP和UDP协议进行网络通信
2.Android中IPC适合的场景及优缺点
IPC适应场景以及优缺点.png注:BroastcastReceiver也是一种IPC
四.Android几种IPC方式的具体分析:
1. Bundle
Bundle应该是我们很熟悉的了,Intent启动四大组件时,可以用Bundle携带数据。
Bundle bundle = new Bundle();
bundle.putString("test","msg")
Intent intent = new Intent();
intent.putExtras(bundle);
startActivity(intent);
不过Bundle只能在启动时向四大组件传递数据。
2.文件共享
文件共享就是在一个进程中将数据写入文件中,然后在另外一个进程中去读取那个文件,这样就也可以进行跨进程通信。不过多线程直接对文件的读写,可能会出现问题,所以这种方式不适合高并发性的跨进程通信。
3.AIDL
AIDL(Android Interface Definition Language,Android接口定义语言).AIDL文件的本质是系统为我们提供了一种快速实现Binder的工具,仅此而已。
https://www.jianshu.com/p/47df50972bb8
4.Messenger
Messenger,信使,通过它可以在不同的进程中传递 Message对象,在Message中放入我们需要的传递的数据,用Handler来处理 Message,这样就可以进行进程间数据传递了,Messenger是一种轻量级IPC方案,它的底层实现是AIDL,Messenger是只能用来传递消息的。
5.ContentProvider
ContentProvider是系统提供的数据共享型组件,是用于不同组件乃至不同应用间共享数据的,所以也可以用来跨进程通信, ContentProvider的底层实现的是Binder,但是它的使用比 AIDL的要简单,根据ContentProvider的特性,ContentProvider适合要在大量数据中提取出一部分数据来进行跨进程通信的场景。
6.Socket
通过Socket来进行跨进程通信,如果是同一手机中的两个进程就直接进行局域网(localhost)通信,如果两个进程是处于不同手机就需要使用网络来通信了。Socket是一个抽象层,其实是封装了TCP/IP协议,然后提供一些API来进行网络通信,Socket通信较为简单,只需要提供 ip和端口号就可以了。
网友评论