IPC机制

作者: 艾特五三 | 来源:发表于2019-08-20 10:37 被阅读0次
my.jpg

一.什么是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和端口号就可以了。

相关文章

网友评论

      本文标题:IPC机制

      本文链接:https://www.haomeiwen.com/subject/clngjctx.html