Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

2019-07-24:请谈谈你对Binder机制的理解? #105

Open
Moosphan opened this issue Jul 24, 2019 · 10 comments
Open

2019-07-24:请谈谈你对Binder机制的理解? #105

Moosphan opened this issue Jul 24, 2019 · 10 comments

Comments

@Moosphan
Copy link
Owner

No description provided.

@ADrunkenLiBai
Copy link

ADrunkenLiBai commented Jul 24, 2019

Binder是Android是一种跨进程的通信的方式,下面几篇文章对Binder进行了详细介绍

  1. 让你了解Binder机制作用以及图解 https://www.jianshu.com/p/225ccd39a667
    2.https://blog.csdn.net/cike110120/article/details/86101700

@gabyallen
Copy link

1.性能稳定;数据传输比传统的数据传输较快。只需一次拷贝数据;高效率
2.数据安全;采用唯一的uid,当安装一个应用app时;系统会为其分配一个uid;一块内存空间;因此进程uid是鉴定进程身份重要标志。
一般接触接触到framework部分比较多一点,也难免要和Binder打一些交道,

@canyie
Copy link

canyie commented Jul 25, 2019

Binder:Binder是android里一种自带的进程通信方式,我们常用的aidl、广播等方式都是基于binder实现的;
binder采用C/S架构,server需要向安卓里的ServiceManager进程注册(该进程的server引用由一个特殊的方式得到,不会出现自相矛盾的情况),由该进程管理;client则通过ServiceMagager获取到server的代理引用,然后向其发起通信
binder的优点:相对于linux自带的一系列通信方式,binder是性能和安全性的折中实现(如其他方式都可以轻易伪造调用者的身份信息,而binder不行)
binder有一个特殊的binder线程池,专门用来处理binder事务
binder淡化了进程的边界,整个系统仿佛运行在同一个进程中,而又有单进程不具有的安全性等
推荐文章:Binder学习指南

@18361237136
Copy link

Binder是夸进程通信的其中一种方式,aidl,广播的底层都是基于binder实现的。
binder采用c/s架构,server需要向安卓的Servicemanager进程注册,由该进程管理。client则通过Servicemanager获取到server的代理引用,然后向其发起通信。
优点:相对于其他方式,binder是性能和安全性折中实现
binder有一个binder线程池,专门用来处理binder事物

@IT666
Copy link

IT666 commented Sep 23, 2019

Binder机制:
1.为了保证进程空间不被其他进程破坏或干扰,Linux中的进程是相互独立或相互隔离的。
2.进程空间分为用户空间和内核空间。用户空间不可以进行数据交互;内核空间可以进行数据交互,所有进程共用一个内核空间。
3.Binder机制相对于Linux内传统的进程间通信方式:(1)性能更好;Binder机制只需要拷贝数据一次,管道、消息队列、Socket等都需要拷贝数据两次;而共享内存虽然不需要拷贝,但实现复杂度高。(2)安全性更高;Binder机制通过UID/PID在内核空间添加了身份标识,安全性更高。
4.Binder跨进程通信机制:基于C/S架构,由Client、Server、Server Manager和Binder驱动组成。
5.Binder驱动实现的原理:通过内存映射,即系统调用了mmap()函数。
6.Server Manager的作用:管理Service的注册和查询。
7.Binder驱动的作用:(1)传递进程间的数据,通过系统调用mmap()函数;(2)实现线程的控制,通过Binder驱动的线程池,并由Binder驱动自身进行管理。
8.Server进程会创建很多线程处理Binder请求,这些线程采用Binder驱动的线程池,由Binder驱动自身进行管理。一个进程的Binder线程池默认最大是16个,超过的请求会阻塞等待空闲的线程。
9.Android中进行进程间通信主要通过Binder类(已经实现了IBinder接口),即具备了跨进程通信的能力。

@manondidi
Copy link

binder机制 是一种 android 进程通信机制
通信过程 由 client server serviceManager binder驱动组成
首先 所有的server都会在 serviceManager 中注册
client 访问 server时 要向 serviceManager 发起请求,
serviceManager 找到 这个 server 并通过 binder驱动 生成一个 server代理 返回给client
client得到了 代理之后 访问 代理server
代理server 相应方法被调用后 会向 binder驱动中去调用真正的server方法

@ppppppad
Copy link

https://zhuanlan.zhihu.com/p/35519585

@wyvector
Copy link

推荐两个:
https://zhuanlan.zhihu.com/p/35519585 同楼上
https://www.jianshu.com/p/af2993526daf 这个也不错

@luckilyyg
Copy link

luckilyyg commented Nov 10, 2023 via email

@Empty0Qc
Copy link

Empty0Qc commented Nov 10, 2023 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests