android Binder 工做流程

.Linux系统进程间通讯有哪些方式?
1.socket

2.name pipe
命名管道;
3.message queue
消息队列;
4.singal
信号量;
5.share memory
共享内存;
.Java系统的通讯方式是什么?
1.socket;
2.name pipe;
.Android系统通讯方式是什么?
Binder 
通讯;
.Binder通讯的优点是什么?
高效率
.Binder通讯的特色是什么?
是同步,而不是异步;
.Binder通讯是如何实现的?
1.Binder
通讯是经过linuxbinder driver来实现的,
2.Binder
通讯操做相似线程迁移(thread migration),两个进程间IPC看起来就象是一个进程进入另外一个进程执行代码而后带着执行的结果返回;
3.Binder
的用户空间为每个进程维护着一个可用的线程池,线程池用于处理到来的IPC以及执行进程本地消息,Binder通讯是同步而不是异步。
. Android中的 Binder通讯实现要点:linux

1. Android中的Binder通讯是基于ServiceClient的工做模型的;
2. 
全部须要IBinder通讯的进程都必须建立一个IBinder接口;
3. 
系统中有一个进程管理全部的system service
4. Android
不容许用户添加非受权的System service
5. 
如今源码开放了,咱们能够修改一些代码来实现添加底层system Service的目的;
6. 
对用户程序来讲,咱们也要建立server,或者Service用于进程间通讯;
7. ActivityManagerService
管理JAVA应用层全部的service建立与链接(connect),disconnect
8. 
全部的Activity也是经过这个service来启动,加载的;
9. ActivityManagerService
也是加载在Systems Servcie中的;
.Android Service工做流程
1.Android
虚拟机启动以前系统会先启动service Manager进程;2.service Manager打开binder驱动,并通知binder kernel驱动程序这个进程将做为System Service Manager
3.
而后该进程将进入一个循环,等待处理来自其余进程的数据。4.用户建立一个System service后,经过defaultServiceManager获得一个远程ServiceManager的接口,经过这个接口咱们能够调用addService函数将System service添加到Service Manager进程中;
5.
而后client能够经过getService获取到须要链接的目的ServiceIBinder对象,这个IBinderServiceBBinderbinder kernel的一个参考,
6.
因此service IBinder binder kernel中不会存在相同的两个IBinder对象,每个Client进程一样须要打开Binder驱动程序。对用户程序而言,咱们得到这个对象就能够经过binder kernel访问service对象中的方法。
7.Client
Service在不一样的进程中,经过这种方式实现了相似线程间的迁移的通讯方式,对用户程序而言当调用Service返回的IBinder接口后,访问Service中的方法就如同调用本身的函数。
相关文章
相关标签/搜索