• Android随笔-IPC


    概述

    IPC全程Inter-Process Communication,跨进程通信,指的是两个进程之间进行数据交换的过程。IPC并不是Android独有的,每一个操作系统需要有相应的IPC机制,比如Windows的剪切板、Linux的管道等。

    分类

    Android中IPC方式常用的有6种:
    在这里插入图片描述

    • Bundle
      Bundle实现了Android特有序列化Parcelable接口,传输效率很快,更方便在Android进程中传递。Bundle或Intent在Activity,Service等四大组件中使用的最为频繁。

    • AIDL
      Android Interface Definition Language 简称AIDL。进程间通信可使用AIDL生成可序列化参数,然后会生成服务端对象的代理类,客户端通过生成的代理类调用服务端对象的方法。适用于跨进程且是并发访问的情况。
      创建.aidl文件后,AS会自动生成基于.aidl的IBinder接口,然后业务代码实现该接口,服务端向客户端公开接口,客户端远程调用公开的接口,验证AIDL通过后就可以通信了。
      AIDL支持Java基本数据类型、String、charSequence、ArrayList、HashMap和实现了Parcelable的对象,其中ArrayList和HashMap里面的元素也都需要是AIDL支持的类型。

    • Socket
      进程间通信,其中一方作为服务端,一方作为客户端,双方通过TCP或UDP进行通信。

    • Messager
      Messager是基于AIDL的一种跨进程的通信方式。

      1. Messager是通过Bundle传递数据的,所以支持的数据类型有限。
      2. Messager使用Bundle进行数据传递,所以传递的数据量有限,数据多的时候不建议使用。
      3. Messager不适用多任务并发的情况。
      4. Messager是异步的。
    • 文件共享
      文件共享即一个进程将数据写入指定的文件中,然后另一个进程需要数据就去读取指定的文件。并发读写可能会导数据无法同步问题,不适合多进程之间的通信,也不适合对数据同步要求高的通信。

    • ContentProvider
      ContentProvider作为Android的四大组件,适用于应用之间的通信。ContentProvider底层也是Binder,支持数据的增删改查,不仅适用于进程间的通信,也适用于进程内部的通信。

    总结

    类型优点缺点场景
    Bundle简单易用数据类型有限四大组件间的通信
    AIDL支持一对多并发,支持实时通信使用复杂,需要处理好数据同步问题一对多且可以远程调用服务
    Socket功能强大,可网络传输,支持一对多并发实时通信使用繁琐网络数据交换
    Messager支持一对多串行,支持实时通信,功能一般不支持远程调用另一个进程的服务,并发难以处理,只支持Bundle 支持的数据类型无并发,串行,且不是远程调用服务
    文件共享简单不适合高并发,没有办法做到实时通信数据简单,实时性要求不高,没有并发
    ContentProvider数据功能强大,支持一对多并发数据共享,且可以扩展侧重于数据的操作一对多进程之间的数据共享
  • 相关阅读:
    【打卡】【Linux 设备管理机制】21天学习挑战赛—RK3399平台开发入门到精通-Day17
    【数据结构】什么是哈希表?为什么哈希表的查询时间复杂度是O
    sql-lib 搭建&31-40关
    Linux安装nodejs问题
    Sendmail 设置 SMTP主机
    React Native环境配置、初始化项目、打包安装到手机,以及开发小知识
    89、Redis 的 value 所支持的数据类型(String、List、Set、Zset、Hash)---->Zset 相关命令
    C语言——操作符详解
    【编程题】【Scratch四级】2021.12 聪明的小猫
    微服务设计模式
  • 原文地址:https://blog.csdn.net/qq_34202054/article/details/126732128