Android进程间通讯
目录
Binder框架
Binder介绍
Android跨进程通讯
Activity
Content Provider
Broadcast
AIDL
Binder 框架(一)
Binder 框架(二)
Binder 应用层类继承关系
Android系统通信方式 Binder
Binder通信的实现:
driver来实现的,
(thread migration),两个进程间IPC看起来就象是一个进程进入另一个进程执行代码然后带着执行的结果返回;
,线程池用于处理到来的IPC以及执行进程本地消息,Binder通信是同步而不是异步。
Binder
Android中的 Binder通信实现要点:
1. Android中的Binder通信是基于Service与Client的工作模型的;
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中的;
Binder
Android的 Service工作流程
Manager进程;
Manager打开binder驱动,并通知binder kernel驱动程序这个进程将作为System Service Manager;
,等待处理来自其他进程的数据。
service后,通过defaultServiceManager得到一个远程ServiceManager的接口,通过这个接口我们可以调用addService函数将System service添加到Service Manager进程中;
,这个IBinder是Service的BBinder在binder kernel的一个参考,
IBinder 在binder kernel中不会存在相同的两个IBinder对象,每一个Client进程同样需要打开Binder驱动程序。对用户程序而言,我们获得这个对象就可以通过binder kernel访问service对象中的方法。
,通过这种方式实现了类似线程间的迁移的通信方式,对用户程序而言当调用Service返回的IBinder接口后,访问Service中的方法就如同调用自己的函数。
binder
进程有自己的地址空间,不同进程间的通信并不能直接引用地址。一般的解决途径是,发送进程把需要传送的数据按照一定格式(marshall)转换成二进制形式/特定格式的数据,发往接收进程;接收进程收到二进制形式、特定格式的数据后,反转换(unmarshall)成原文数据,然后使用。binder使用的就是这种步骤。 binder使用的是同步c/s模型,s循环阻塞在接收数据操作上,随时处理c的数据,处理后发送回c;c则将请求服务的数据发送到s,阻塞在收取s返回数据,收到数据后,继续自己的工作。 binder的框架可以分成3层 最下层是linux os和binder driver。binder driver本质上是进程间的共享内存,各进程将要发送到其它进程的数据写入到driver,从driver读取其它进程发送来的数据。 中间层是cpp实现的framework,完成数据的接收发送转换,和c/s流程的支持。 其实到中间层,binder的架构就已经完全具备了。但android使用的是java做为一般app的开发语言。所以还需要jni和相应java binder类的支持,这就是中间层上面的第三层:jni/java
binder driver
binder driver
android进程间通讯 来自淘豆网m.daumloan.com转载请标明出处.