Binder个人简单总结

Android  小知识  2023年12月16日 am8:08发布12个月前更新 城堡大人
95 0 0

前言

Binder对于Android开发,很熟悉,也很陌生。我也经常用,但对其原理不是很了解,因此参考其他大佬的,做一下笔记。

简单记录一下Android中Binder的原理(其实主要摘抄),方便自己回顾。

正文

什么是Binder

Binder是Android中的一种跨进程通信(IPC)的方式。

为啥选择Binder

Android上主要从以下几点考虑

  1. 性能:Binde在数据拷贝只拷贝一次,而管道、消息队列、Socket都需要两次,共享内存不需要拷贝。Binder的性能仅次于共享内存。

  2. 稳定性:Binder基于C/S架构,客户端与服务端彼此独立,稳定性较好。而拷贝性能更好的共享内存,存在并发同步问题,容易出现死锁和资源竟争,稳定性较差。

  3. 安全性:注册服务时,Binder会分配唯一的UID,用来鉴别进程的标志,如果服务是恶意软件启动的服务,那么可以通过UID找到服务并进行禁止。传统IPC是由服务自己往数据包里填入UID/PID去告知内核,这个标记完全是在用户空间控制的,存在恶意篡改的可能。因此Binder的安全性更高。

原理

上面也说了Binder是基于C/S架构,也就是一个Client端,一个Server端。

虚线就是代表Client、Server不是直接与ServiceManager直接交互,而是通过Binder驱动

Binder个人简单总结

注册服务
  1. Server进程向Binder驱动发起服务注册请求

  2. Binder驱动将注册请求转发给ServiceManager进程

  3. Server进程信息添加到ServiceManager

注册成功后,ServiceManager进程拥有Service进程的信息。

获取服务
  1. Client进程想Binder驱动发送获取服务请求,传递需要获取的服务名称

  2. Binder驱动将该驱动请求转发给ServiceManager进程

  3. ServiceManager查找对应的服务信息

  4. 通过Binder驱动将上述服务信息返回给Client进程

PS: Client进程获取到的是Server的代理对象

使用服务
  1. Client进程发送数据到Server进程

  2. Server进程根据Client进程的请求进程执行对应的方法

  3. Server进程将对应方法的结果返回给Client进程

参考文章

  1. 《Android插件化开发指南-包建强》

  2. Binder通信原理

  3. 关于Binder面试详解

 历史上的今天

  1. 2021: 倒计时CountDownTimer的简单介绍(0条评论)
版权声明 1、 本站名称: 笔友城堡
2、 本站网址: https://www.biumall.com/
3、 本站部分文章来源于网络,仅供学习与参考,如有侵权,请留言

暂无评论

暂无评论...

随机推荐

Android中assets拷贝文件

前言Android需求:把指定文件拷贝到指定目录。最好的方式就是系统升级时内置进入指定目录,但客户说只是临时的,后续不要。因此内置到apk的assets,启动apk后就主动拷贝过去。正文只是拷贝文件,不涉及文件夹,文件夹需要遍历拷贝。下面是简单的拷贝代码,就是文件IO操作。asse...

DialogFragment使用

本想自己总结一下,但发现有网友已经整理,而且还不错。本文摘抄于《Android 必知必会 - DialogFragment 使用总结》背景Android 官方推荐使用 DialogFragment 来代替 Dialog ,可以让它具有更高的可复用性(降低耦合)和更好的便利性(很好的处理...

[代码]Listener和MainListener

前言这里简单记录一下项目中用的Listener和MainListener。正文隐藏内容!付费阅读后才能查看!¥7多个隐藏块只需支付一次付费阅读参考文章无

Android按键音简单源码分析

前言记录一下Android按键音相关分析。记录于此,方便自己查阅和回顾。Android P源码上分析正文当一个View设置点击监听事件setOnClickListener()时,如果用户点击默认就会有按键音,当然如果你不需要,可以通过如下取消。xml配置android:s...

Class not found when unmarshalling

前言记录一下使用Bundle.putParcelable()或Bundle.putParcelableArrayList()传输Parcelable数量时出现的问题,方便自己查阅。正文报错日志Parcel (14686): Class not found when unmarshalli...

冯友兰:我的读书经验

我今年八十七岁了,从七岁上学起就读书,一直读了八十年,其间基本上没有间断,不能说对于读书没有一点经验。我所读的书,大概都是文、史、哲方面的,特别是哲。我的经验总结起来有四点:(1)精其选,(2)解其言,(3)知其意,(4)明其理。先说第一点。古今中外,积累起来的书真是多极了,真是浩如烟海。但是,书...