谈谈Android的IPC(进程间通信)机制
2016-03-01 17:36
603 查看
Android系统中,每一个应用程序都是由一些Activity和Service组成的,这些Activity和Service有可能运行在同一个进程中,也有可能运行在不同的进程中,android的IPC机制也就是Binder机制,Android系统是基于Linux内核的,而Linux内核继承和兼容了丰富的Unix系统进程间通信(IPC)机制, 但是,Android系统没有采用上述提到的各种进程间通信机制,而是采用Binder机制,Binder是一种进程间通信机制,它是一种类似于COM和CORBA分布式组件架构,通俗一点,其实是提供远程过程调用(RPC)功能。从英文字面上意思看,Binder具有粘结剂的意思,那么它把什么东西粘结在一起呢?在Android系统的Binder机制中,由一系统组件组成,分别是Client、Server、Service
Manager和Binder驱动程序,其中Client、Server和Service Manager运行在用户空间,Binder驱动程序运行内核空间。Binder就是一种把这四个组件粘合在一起的粘结剂了,其中,核心组件便是Binder驱动程序了,Service Manager提供了辅助管理的功能,Client和Server正是在Binder驱动和ServiceManager提供的基础设施上,进行Client-Server之间的通信;
1. Client、Server和Service Manager实现在用户空间中,Binder驱动程序实现在内核空间中
2. Binder驱动程序和Service Manager在Android平台中已经实现,开发者只需要在用户空间实现自己的Client和Server
3.Binder驱动程序提供设备文件/dev/binder与用户空间交互,Client、Server和Service Manager通过open和ioctl文件操作函数与Binder驱动程序进行通信
4. Client和Server之间的进程间通信通过Binder驱动程序间接实现
5. Service Manager是一个守护进程,用来管理Server,并向Client提供查询Server接口的能力
android binder机制主要在client server servicemanager 驱动binder 之间的交互
1.client server servicemanager实现在用户空间 驱动binder实现在内核空间中
2.其中servicemanager和驱动binder在android 平台中已经实现 而我们只需要实现client 和 server即可
3.Binder驱动程序通过提供dev/binder和用户空间交互,而client server servicemanager通过打开open ioctl文件操作函数和binder驱动程序通信。
4.client 和 server之间的通信通过binder驱动程序之间进行实现。
5.servicemanager是一个守护程序,通过管理server 提供给client的server的能力。
其中servermanager.c 文件中main函数主要实现了三个功能
1.打开dev/binder驱动程序文件
2.告诉binder是上下文联系管理中
3.进入一个无穷循环,充当server角色,等待clent请求。
4.建立128k内存映射
对server来说通过servicemanager远程接口(Iservicemanager.h中gDefaultServiceManager)拿到Bpservicemanager,然后通过Bpservicemanager:addserivce 与binder程序之间进行交互。
Client也是通过IServiceManager.getService接口来获得Service接口。
相关文章推荐
- 查看Android应用包名、Activity的几个方法
- OTA升级总结
- android 自定义属性中format后面引用的种类
- android framework 图解分享
- Xutils3.0下载带通知栏通知
- nomasp 博客导读:Android、UWP、Algorithm、Lisp(找工作中……
- android webview中调用了js的时候混淆注意事项
- 【Android】使用VideoView播放视频
- Android 自定义View实现动态炫酷按钮
- Android Studio常用快捷键
- Android的材料设计兼容库(Design Support Library)
- Android 开机自启动
- 编译Android时,添加或者删除system.img中第三方apk、更改Android系统默认语言
- Android库Volley的使用介绍
- 【Android进度条】三种方式实现自定义圆形进度条ProgressBar
- Android 自定义View实现
- Android Context解析
- android activity中监听View测量完成的4种方式
- Android RecyclerView 使用解析,替代ListView
- MAC下安装android studio问题汇总(持续更新)