😀
Android进程间通信(IPC)是一个重要的概念,主要用于不同应用程序或应用程序的不同部分(通常运行在不同的进程中)之间的数据交换。

IPC方式

  • Intent
  • Binder
  • ContentProvider
  • AIDL
  • Broadcast
  • Messenger
  • Share Memory
  • Socket

引言

什么是IPC

IPC, Inter-Process Communication)是指在Android平台上,进程之间进行数据交换和通信的机制。

为什么需要IPC

  • 在Android中,每个应用运行在独立的进程中,并拥有独立的虚拟机,这意味着应用之间无法直接访问彼此的内存空间。
  • 因此,当应用需要与其他进程共享数据或服务时,就需要通过IPC机制来实现。

Android中的IPC

Intent

  • 显式 Intents:直接指定组件名称(如Activity、Service等)进行通信。
  • 隐式 Intents:声明一个通用的action,由系统解析哪个组件能够响应该Intent。
  • 用途:启动其他应用的组件(如活动、服务等),传递简单的数据。
  • 特点:简单易用,可以隐式或显式地启动组件,支持数据传递。

Binder

  • 用途:进行复杂的客户端与服务端通信,支持方法调用和结果返回
  • 特点:高效,支持双向通信,Android的许多系统服务(如剪贴板、通知等)都是基于Binder实现的。

内容提供者(Content Provider)

  • 用途:共享数据给其他应用,如联系人、媒体文件等。
  • 特点:结构化数据访问,支持对数据的增删查改操作,通过URI访问。

AIDL(Android Interface Definition Language)

  • 用途:定义跨进程接口,使得一个应用能够调用另一个应用的远程方法。
  • 特点:适用于需要高度定制的接口和性能要求高的服务。

Broadcast Receivers

  • 用途:收发广播消息,如系统通知、其他应用的事件等。
  • 特点:可以异步接收来自系统或其他应用的广播消息。

Messenger

  • 基于Binder,但使用更简单的消息队列来进行通信。适用于不需要多线程处理的简单数据交换。
  • Messenger封装了Handler,允许跨进程发送Message对象。

共享内存(Shared Memory)

  • 通过Ashmem(Anonymous Shared Memory),允许创建可跨进程共享的内存区域。
  • 这种方式适合传输大量数据,但需要在进程间进行同步。

Socket通信

  • Socket是一种网络通信方式,支持TCP和UDP协议。
  • 通过网络套接字进行进程间的通信,不限于本地机器,也可以用于网络通信。

IPC简单使用

Intent

使用Intent启动另一个应用的Activity

ContentProvider

  • 注册ContentProvider(数据提供方):
    • 数据提供方:
      • 数据消费端:

        Broadcast

        • 接收广播:
          • 发送广播:

            Messenger

            • 服务端代码:
              • 客服端代码:

                Socket

                • 服务端代码:
                  • 客户端代码:

                    AIDL

                    关于AIDL的简单使用,可以参考
                    AIDL 简单使用

                    最后

                    • Android特有: Binder, Intent, Content Provider, AIDL、Messenger
                    • Linux提供: 管道, 信号, 共享内存, 套接字
                    • 基于Binder实现: Binder, 部分Intents (服务相关的), Content Provider, AIDL、Messenger

                    推荐\参考

                     
                    Leetcode LCR 016. 无重复字符的最长子串Java类的加载
                    Loading...