ServiceManager,其实也是一个Service,不过它的Server端实现并未使用Binder库的结构实现,而是直接打开binder/dev进行通信的,不具有普遍性。

下面以MediaServer中的MediaPlayService为例,说明更加普遍的使用binder通信机制的Service的实现。

一、Service组件的启动

  Service组件是在Server进程中运行的,Server进程通常从其main函数启动,启动时通常做两件事:

  1.首先将它里面的Service组件注册到ServiceManager中

  2.启动一个Binder线程池来等待和处理Client进程的通信请求。

  以MediaServer及其中的MediaPlayService为例,其入口位置为:frameworks\av\media\mediaserver\Main_mediaserver.cpp中。

  MeidaPlayService的部分结构图如下:

  

  其完整结构完全按照binder库的结构实现。

  其启动过程如下:

  

  上图中talkWithDriver调用中,使用ioctl与binder驱动程序进行交互,会将通信数据封装为一个binder_write_read结构体,使用BINDER_WRITE_READ协议通信。

  在Binder驱动程序内部使用binder_ioctl对所要处理的数据进行分发,最终通过binder_thread_read 和 binder_thread_write,将注册请求告诉ServiceManager,并将处理结果再次经过Binder驱动返回MediaServer进程。

二、Service代理对象的获取

  Service代理对象的获取过程为一个Client进程与ServiceManager进程标准的Binder通信过程:

  示意图如下:

  

  其中getService会调用checkService,IServiceManager的这真正实现类为BpServiceManager,它是ServiceManager的代理对象。Client进程通过它,经由Binder驱动程序与ServiceManager所在的进程取得联系进行通信。

最新文章

  1. SpringMVC操作指南-登录功能与请求过滤
  2. 素数方阵的工程ing
  3. nested exception is java.lang.RuntimeException: Error parsing Mapper XML. Cause: java.lang.IllegalArgumentException: Result Maps collection already contains value for
  4. COJ 2110 Day7-例3
  5. Chapter 12 外观模式
  6. SpringMVC(三)-- 视图和视图解析器、数据格式化标签、数据类型转换、SpringMVC处理JSON数据、文件上传
  7. python相关资料
  8. Java --Annotation学习心得体会及笔记
  9. The 12th tip of DB Query Analyzer, powerful in text file process
  10. git工具使用说明
  11. 学习笔记CB003:分块、标记、关系抽取、文法特征结构
  12. python --商品评价---- 数据表结构以及理解
  13. 集成腾讯位置服务到webapi
  14. 离线安装redis-cluster
  15. 计算机网络--HTTP协议
  16. jQuery 实现点击页面其他地方隐藏菜单
  17. 使用URLConnection进行访问
  18. NOI2017 游记
  19. 力扣(LeetCode)58. 最后一个单词的长度
  20. [日常] Go语言圣经-错误,函数值习题

热门文章

  1. 使用.NET Core 构建现代化的桌面应用
  2. OpenResty + ModSecurity + OWASP CRS
  3. IT兄弟连 HTML5教程 DIV+CSS网页标准化布局 小结及习题
  4. (好文转载与总结)Windows10安装ubuntu18.04
  5. Java网络爬虫 HttpClient
  6. Spring Boot2解决idea console 控制台输出乱码
  7. C#中try catch中throw ex和throw方式抛出异常有何不同_异常捕获堆栈丢失问题
  8. Redis 命令执行全过程分析
  9. 松软科技web课堂:JavaScript Math 对象
  10. form表单input回车提交问题