Android Binder原理

本文深入解析了Binder机制在Android系统中的作用及其实现原理,详细介绍了进程间通信(IPC)的概念,以及Binder如何作为连接不同进程的桥梁,实现数据的跨进程传递。文章还探讨了Binder驱动的线程管理,以及在并发场景下的处理方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

IPC机制:进程间通信(Inter Process communication),指两个进程之间进行数据交换

进程知识点

进程空间的分配
  • 一个进程空间可以分为用户空间和内核空间(Kernel),即把进程内 用户 和 内核隔离开来
  • 二者的区别:
    • 用户空间的数据在进程之间是不可共享的,所以 用户空间 = 不可共享空间
    • 内核空间的数据在进程之间是共享 的,所以用户空间 = 可共享空间
  • 在进程之间,用户和内核的交换 被称为系统调用

在这里插入图片描述

进程的隔离

为了保证 安全性 和 独立性,一个进程不能直接操作或访问另一个进程,即Android 的进程是相互独立的,隔离的

跨进程通信(IPC)
  • 进程隔离后,由于某些需求,进程间 需要合作/ 交互
  • 跨进程通信的原理:
    • 先通过 进程间 的内核空间进行数据交互
    • 在通过 进程间 的用户空间 与 内核空间进行数据交互,从而实现进程间的用户空间的数据交互

在这里插入图片描述

而Binder 就是充当 链接两个进程(内核空间)的通道。

Binder跨进程通信机制模型

原理

在这里插入图片描述

注意

1、Client 进程, Service进程 和 ServiceManager进程之间的交互都必须通过Binder驱动(使用open和ioctl文件操作函数),而非直接交互

原因:
1,Client进程,Service进程 & Service Manager进程属于进程空间的用户空间,不可进行进程间交互
2,Binder驱动 属于 进程空间的内核空间,可进行进程间 和 进程内交互
原理图如下,虚线表示并非直接交互:
在这里插入图片描述

2、Binder驱动 & Service Manager进程属于Android基础架构(系统已经实现好的);而Client进程和 Service进程 属于Android应用层(需要开发者自己实现)
所以在跨进程通信时,开发者只需要定义Client 和 Service进程 并显式使用上述三个步骤,最终借助Android基础架构功能就可以完成进程间通信
在这里插入图片描述

3、Binder请求的线程管理

  • Service进程会创建很多线程来处理Binder请求
  • 管理Binder模型的线程是采用Binder驱动的线程池,并由Binder驱动自身进行管理(而不是由Service线程来管理)
  • 一个进程的Binder线程默认最大是16,超过的请求会被阻塞等待空间的Binder线程
    所以在进程通信时处理并发问题时,例如使用ComtentProvider时,它的CRUD(创建,检索,更新,删除)方法只能同时有16个线程同时工作

参考:https://www.cnblogs.com/xinmengwuheng/p/7070167.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值