• 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数据功能强大,支持一对多并发数据共享,且可以扩展侧重于数据的操作一对多进程之间的数据共享
  • 相关阅读:
    如何注册微信小程序
    [从零开始学习FPGA编程-41]:视野篇 - 摩尔时代与摩尔定律以及后摩尔时代的到来
    连续-可导-光滑
    RecyclerView 空白区域点击事件
    compact unwind compressed function offset doesn‘t fit in 24 bits
    基于安卓的校园信息助手系统设计(Eclipse开发)
    阿里最新总结的 spring 学习笔记PDF版分享,这是我见过这牛逼的spring全家桶
    马尔可夫链预测举例——钢琴销售的存贮策略
    人们越来越担心MogaFX外汇储备的减少
    别问怎么下载,金蝶云星空SaaS BI系统不用下载
  • 原文地址:https://blog.csdn.net/qq_34202054/article/details/126732128