为什么80%的码农都做不了架构师?>>>   

android 实现binder机制的server进程学习

进程开始会打开binder设备,谁打开的呢?就是ProcessState:self,再加一句,这个对象是单例的。它还会创建一个接收数据的共享内存,返回fd,每个进程只会打开一次binder设备。

server要想跟服务管理器注册服务,就需要一个代理,跟服务管理器交互,即IServiceManager,defaultServiceManager返回在服务管理器的代理端,这个interface_cast需要一个BpBinder作为参数,先探讨参数BpBinder的产生过程;ProcessState::self->getContextObject需要传递一个参数Handler 0(0就是服务管理器,其余的服务是别的),根据Handler查询返回代理端IBinder(BpBinder(0)),这中间的过程呢,根据两个宏定义,一个声明方法,一个实现方法,来生成了一个Bp**

BpBinder 是客户端用来与server交互的代理类,p即Proxy的意思;BBinder则是与proxy相对的一端,他是proxy交互的目的端,如果说Proxy代表客户端,那么BBinder则代表服务端。

IServiceManager、BpServiceManager和BnServiceManager都与业务逻辑相关,BnServiceManager同时从IServiceManager BBinder派生,表示它可以直接参与Binder通信,BpServiceManager虽然从BpInterface中派生,但是这条分支似乎与BpBinder没有关系,BnServiceManager是一个虚类,它的业务函数最终需要子类来实现,

既然BpServiceManager与Binder 没哟直接的关系,那么它与Binder是怎样交互的呢,请注意看源代码,BpServiceManager的基类构造函数中,需要的参数就是IBinder类型,实际就是BpBinder,这样BpServiceManager的一个变量MRemote指向BpBinder,BpServiceManager会实现IServiceManager中定义的虚函数,BpBinder作为通信的代表,就跟Binder有关系了。

接下来分析注册一个服务实例,来学习业务层的工作的完成。在服务的初始化中,注册服务到服务管理器。服务的addService把请求数据打包成data后,传给了BpBinder的transact函数,表示业务层addService的方法,把通信层的工作交给了BpBinder。

而真正与Binder通信的是transact中的IPCThreadState方法,

转载于:https://my.oschina.net/snail0/blog/387858

android binder相关推荐

  1. Android Binder IPC机制

    之前有很多人问过我TaintDroid的内容,所以一点点吧涉及的思路整理一下. 今天又看了一遍,确实需要很多的技术支持以及扎实的功底,不管是Java的还是Android,从系统底层一直到顶层,涉及的知 ...

  2. Android Binder 学习笔记

    前言: Binder是Android给我们提供的一种跨进程通信方式.理解Binder能帮助我们更好的理解Android的系统设计,比如说四大组件,AMS,WMS等系统服务的底层通信机制就都是基于Bin ...

  3. aidl使用_借助 AIDL 理解 Android Binder 机制——Binder 来龙去脉

    AIDL 是 Android Interface Definition Language(Android 接口定义语言)的缩写,它是 Android 进程间通信的接口语言.由于 Android 系统的 ...

  4. Android Binder Driver缺陷导致定屏问题分析

    本文讲解异步Android binder call是如何阻塞整个系统的,通过ramdump信息以及binder通信协议来演绎并还原定屏现场. 一.背景知识点 解决此问题所涉及到的基础知识点有:Trac ...

  5. 理解Android Binder机制(3/3):Java层

    本文是Android Binder机制解析的第三篇,也是最后一篇文章.本文会讲解Binder Framework Java部分的逻辑. Binder机制分析的前面两篇文章,请移步这里: 理解Andro ...

  6. 理解Android Binder机制(1/3):驱动篇

    Binder的实现是比较复杂的,想要完全弄明白是怎么一回事,并不是一件容易的事情. 这里面牵涉到好几个层次,每一层都有一些模块和机制需要理解.这部分内容预计会分为三篇文章来讲解.本文是第一篇,首先会对 ...

  7. Android Binder机制(1501210451 张志康)

    本文主要分析native层和Java层的Android binder通信机制. binder是Android最为常见的进程通信机制之一,其驱动和通信库是binder的核心,分别由C和C++编写,应用程 ...

  8. Android Binder设计与实现 - 实现篇(1)

    本文属于原创作品,转载请注明出处并放于明显位置,原文地址:http://www.cnblogs.com/albert1017/p/3849585.html 前言 在学习Android的Binder机制 ...

  9. Android Binder 分析——匿名共享内存(Ashmem)

    前面分析了 binder 中用来打包.传递数据的 Parcel,一般用来传递 IPC 中的小型参数和返回值.binder 目前每个进程 mmap 接收数据的内存是 1M,所以就算你不考虑效率问题用 P ...

  10. Android Binder 分析——数据传递者(Parcel)

    前面 binder 原理和通信模型中在接口实现部分(Bp 和 Bn)中应该看到很多地方都有使用 parcel.这个 android 专门设计用来跨进程传递数据的,实现在 native,java 层有接 ...

最新文章

  1. koa2 session mysql_koa2实现session的两种方式(基于Redis 和MySQL)
  2. 卫星参数大全_【视频】早期国外做工精良的海事卫星电话机拆解
  3. php+条件限定符,const 限定符
  4. linux8安装bbr_CentOS 7安装4.9内核开启BBR
  5. 三种方法可以使用StyleGAN预先训的生成器
  6. layui如何存在多个弹窗_layer重复弹出(layui弹层同时存在多个)的解决方法_心善_前端开发者...
  7. Linux目录结构及解释
  8. Codeforces Round #248 (Div. 2) B. Kuriyama Mirai's Stones
  9. 苹果5s现在还能用吗_苹果ios稳定企业签名,现在苹果企业签名还是最稳定的苹果签名吗...
  10. 一本程序员职场的百科全书
  11. vue 表单验证 支持6位小写字母和数字组合,必须包含2位字母
  12. Webservice 安全性访问
  13. 从零开始搭建一个K8S的环境
  14. Spss-kmeans聚类分析操作
  15. 微型计算机的拼音,微型计算机拼音
  16. 两年数据对比柱形图_你与专业堆积柱形图的距离,只差一个数据标签
  17. Cinema DNG raw视频处理
  18. 风螺旋线公切线的算法
  19. torch.zeros_like()和torch.ones_like()简要介绍
  20. 商业银行金融IC卡国密改造安全建设方案

热门文章

  1. SQL Server 2008的cross apply 和 outer apply
  2. 服务器端PHP多进程编程实战
  3. 当技术面试官的一些心得
  4. 淘宝的人工封IP技术真好玩
  5. 数学建模入门例题python_[Python与数学建模-入门使用]-2Python基础知识
  6. 计算机电容的作用,电容和电感的作用
  7. 分享Kali Linux 2017.1镜像
  8. MAC OS 10.11.1虚拟机免费下载已安装Xcode7图片后有下载地址
  9. iOS Sprite Kit教程之场景的设置
  10. BeagleBone硬件概览Ethernet端口板载LEDc重置按钮等介绍