第 2 章 IPC 机制

2.4 Android 中的 IPC 方式

前言:Android 中,进程通信的方式有很多种,那么都有哪些呢?

使用 Bundle

四大组件中的三大组件(Activity、Service、Receiver)都是支持在 Intent 中传递 Bundle 数据的,由于 Bundle 实现了 Parcelable 接口,所以它可以方便地在不同进程间传输。

使用文件共享

两个进程通过读/写同一个文件来交换数据,比如 A 进程把数据写入文件,B 进程通过读取这个文件来获取数据。在 Windows 上,一个文件如果被加了排斥锁将会导致其他线程无法对其进行访问,包括读和写,而由于 Android 系统基于 Linux,使得其并发读/写文件可以没有限制地进行,甚至两个线程同时对同一个文件进行写操作都是允许的,尽管这可能出问题。

本质上来说,SharedPreferences 也属于文件的一种,但是由于系统对它的读/写有一定的缓存策略,即在内存中会有一份 SharedPreferences 文件的缓存,因此在多进程模式下,系统对它的读/写就变得不可靠,当面对高并发的读/写访问,SharedPreferences 有很大几率会丢失数据,因此,不建议在进程间通信中使用 SharedPreferences。

使用 Messenger

通过它可以在不同进程中传递 Message 对象,在 Message 中放入我们需要传递的数据,就可以轻松地实现数据的进程间传递了。Messenger 是一种轻量级的 IPC 方案,它的底层实现是 AIDL。同时,由于它一次处理一个请求,因此在服务端我们不用考虑线程同步的问题,这是因为服务端中不存在并发执行的情形。

使用 AIDL

Messenger 是以串行的方式处理客户端发来的消息,如果大量的消息同时发送到服务端,服务端仍然只能一个个处理,如果有大量的并发请求,我们可以使用 AIDL 来实现跨进程的方法调用。

使用 ContentProvider

ContentProvider 是 Android 中提供的专门用于不同应用间进行数据共享的方式,它和 Messenger 一样,底层实现同样也是 Binder。

使用 Socket

Socket 也称为“套接字”,是网络通信中的概念,它分为流式套接字和用户数据报套接字两种,分别对应于网络的传输控制层中的 TCP 和 UDP 协议。Socket 不仅仅能实现进程间的通信,还可以实现设备间的通信。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值