Android 进程间通讯

传统进程间通讯

两次 copy 数据:管道 、 消息队列、信号 、 socket
在这里插入图片描述

管道 pipe

匿名管道,常常用于父进程和子进程之间通讯; 有名管道可以跨进程通讯

消息队列 messager

信号 signal 跟广播很像

套接字 socket

减少数据拷贝通信方式对比

在这里插入图片描述

共享内存

开辟一个内存区域,两个进程都可以访问,处理和控制复杂,需要处理并发的问题;

Parcel.java 可以作为 内存共享 和 Binder 的载体;

Binder

发送端 client 使用 binder 发送数据时在内核中获取 pid 放入到 copy 的数据包中, 然后给 server 进行身份识别;

  • 所以每一个 binder 都会有 mmap 对应的内核空间和自己进程空间的映射,还有一个物理内存做为载体; 所以在拿数据不需要 copy;

  • 发送数据时需要一次 copy 数据到指定 server binder 映射的内核空间区域;
    在这里插入图片描述

传统IO

  • 虚拟内存被操作系统分为两块:用户空间和内核空间,用户空间时用户程序代码运行的地方,

  • 内核空间是内核代码运行的地方,内核空间由所有进程共享。 为了安全,他们是隔离;

传统 IO SharePrefence 使用方式:
在这里插入图片描述

MMAP

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值