什么是Binder?php
为何要使用Binder?技术博客大总结linux
详细一点说,主要有两个方面的缘由:android
性能方面git
安全方面github
Binder中是如何进行线程管理的?面试
总结binder讲的是什么?segmentfault
Android中进程和线程的关系?缓存
一个APP通常对应一个进程和有限个线程安全
为什么须要进行IPC?服务器
多进程形成的影响可总结为如下四方面
Binder的工做流程是怎样的?
binder工做流程图以下所示:
Binder主要能提供哪些功能?
Binder通讯机制原理是怎样的?
Binder运行机制是怎样的?
Binder通讯的四个角色:
Binder机制有什么优点
Android中跨进程通信的几种方式?
Android 跨进程通讯,像intent,contentProvider,广播,service均可以跨进程通讯。
实际开发中,有哪些场景使用Binder进行数据传输?
经过AIDL实现方式解释Binder数据传输的具体过程
AIDL原理是什么?如何优化多模块都使用AIDL的状况?
AIDL接口:继承IInterface。 Stub类:Binder的实现类,服务端经过这个类来提供服务。 Proxy类:服务器的本地代理,客户端经过这个类调用服务器的方法。 asInterface():客户端调用,将服务端的返回的Binder对象,转换成客户端所须要的AIDL接口类型对象。返回对象: 若客户端和服务端位于同一进程,则直接返回Stub对象自己; 不然,返回的是系统封装后的Stub.proxy对象。 asBinder():根据当前调用状况返回代理Proxy的Binder对象。 onTransact():运行服务端的Binder线程池中,当客户端发起跨进程请求时,远程请求会经过系统底层封装后交由此方法来处理。 transact():运行在客户端,当客户端发起远程请求的同时将当前线程挂起。以后调用服务端的onTransact()直到远程请求返回,当前线程才继续执行。
为什么说Binder相比传统的Socket性能更高效?
为什么说Binder相比传统IPC安全性更高?
Service Manager是如何成为一个守护进程的?
Service Manager在用户空间的源代码位于frameworks/base/cmds/servicemanager目录下,主要是由binder.h、binder.c和service_manager.c三个文件组成。Service Manager的入口位于service_manager.c文件中的main函数:
int main(int argc, char **argv){ struct binder_state *bs; void *svcmgr = BINDER_SERVICE_MANAGER; bs = binder_open(128*1024); if (binder_become_context_manager(bs)) { LOGE("cannot become context manager (%s)\n", strerror(errno)); return -1; } svcmgr_handle = svcmgr; binder_loop(bs, svcmgr_handler); return 0; }
Server和Client是如何得到Service Manager接口的?
在Android系统的Binder机制中,Server和Client拿到这个Service Manager远程接口以后怎么用呢?