linux下进程间通信 :管道,共享内存,信号量,Socket等,java的进程间通信有RPC,RMI,CORBA,Socket等。
Binder作为Android系统进程间通信方式不同于上面传统的IPC,它有着自己的优势。Binder是基于CS(client-service)软件架构,Binder通信是同步,非异步的。
为什么选择 Binder
在上面这些可供选择的方式中,Android使用得最多也最被认可的还是Binder机制。为什么会选择Binder来作为进程之间的通信机制呢?因为Binder更加简洁和快速,消耗的内存资源更小吗?不错,这些也正是Binder的优点。当然,也还有很多其他原因,比如传统的进程间通信可能会增加进程的开销,而且有进程过载和安全漏洞等方面的风险,Binder正好能解决和避免这些问题。
Binder主要能提供以下一些功能:
1.用驱动程序来推进进程间的通信。
2.通过共享内存来提高性能。
3.为进程请求分配每个进程的线程池。
4.针对系统中的对象引入了引用计数和跨进程的对象引用映射。 进程间同步调用。
Binder 框架
Binder 通信模型主要四部分:Server,Client,ServiceManager及Binder驱动。其中前三部分运行于用户空间,驱动运行于内核空间。
Binder 驱动
Binder 在内核层基于Kernel Driver的形式生成一个供外部操作的虚拟设备 /dev/binder,这一点类似于内核所支持的posix 共享内存实现方式: /dev/shm。Android中的Binder机制基于OpenBinder实现的。
/dev/binder 是一个字符驱动设备,其实现遵循Linux设备驱动模型,它是Android系统IPC的核心部分。(代码位置:kernel/drivers/staging/binder.c), binder作为抽象设备,它没有直接操作硬件,只是完成了内存的拷贝处理。
关于Binder驱动的深入了解,推荐阅读:
Service Manager、Service 与Client
Server Manager主要是管理Servie,向client提供查询Service远程接口。Service Manager、service、client分别运行在独立的进程中的,他们之间的通信也是采用Binder机制进行进通信。因此,Service Manager在充当Binder机制的守护进程的角色的同时,也在充当Server的角色,然而,它是一种特殊的Server。
关于Service在Android中有两种:
1.本地服务(Local Service):用于应用程序内部
2.远程服务(Remote Sercie):用于android系统内部的应用程序之间
这里说的是远程服务,Remote Service通过ServiceManager.addService方法向Service Manager注册,Client通过Service Manager的getService接口中来获得Server远程接口,