Binder学习笔记

在这里插入图片描述

三个方面回答:进程间通信机制,虚拟物理设备驱动;能发起通信的Java类;

很多一线大厂的APP就是多进程在运行。

  • 推送就是一个单独进程,保持连接的稳定性。
  • WebView退出不干净,单独进程,在退出WebView时直接杀掉该进程 就不会有内存泄漏了。
    在这里插入图片描述
    Application 的onCreate 会执行多次,初始化第三方库 避免重复初始化。

Linux本身是有进程间通信的,为何基于Linux的Android还要新搞出一个Binder呢?优势何在?

共享内存,Socket,管道(如handler实现原理),消息队列 都是进程间通信;
在这里插入图片描述

Socket 拷贝两次 性能最慢。

共享内存 易用性差,例如线程安全问题:例如死锁,线程不同步
何为线程安全:当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象是线程安全的。

安全性:为每一个APP分配UID

  • 实名:注册的是实名
  • 匿名:未注册是匿名,接入支付宝SDK是匿名的

同一进程的不同线程 可以直接访问对象,对象在堆,JVM中方法区和堆都是线程共享的,而不同进程之间无法直接访问对象。
Binder 是如何做到一次拷贝的?

在这里插入图片描述

Binder处于进程的内核空间
所有进程的内核空间共享同一块物理内存

内存映射 虚拟内存–>物理内存 类似 地球仪 :地球
在这里插入图片描述

Binder优势在于 绕开系统调用(调用一次即拷贝一次),直接在用户空间和内核空间开辟一块共享区域(同一块物理内存,该区域由Binder驱动提供),

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

正常情况下,开辟虚拟内存,是无法拿到实际存储的物理内存的,是由系统分配存储的。
mmp 虚拟内存绑定了物理内存地址,例如写文件,可以绕开文件对象,直接对物理内存操作。该块物理内存由Binder驱动提供(Binder驱动就是个文件)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值