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