Binder间进程通信的JAVA层接口,主要是通过JNI方法来调用Binder库的C/C++接口

在JAVA层,将Service组件称为JAVA服务,Service组件的代理称为JAVA服务代理。

一、ServiceManager的Java层代理对象(ServiceManagerProxy)的获取过程。

  个人感觉JAVA层的ServiceManager的Java服务和Java服务代理的实现结构还是很像的,如下:

  Java服务类关系图:

  

  java服务代理的类关系图:

  

  ServiceManager代理对象的获取,是通过ServiceManager类的getIsServiceManager实现的,由ServiceManagerNative的asInterface将一个BinderProxy包装成ServiceManagerProxy实现。

  而BinderProxy的获取,则是通过JNI调用android_os_BinderInternal_getContextObject得到的。Java层BinderProxy对象由该函数创建,并且保存在全局变量gBinderProxyOffsets中。

二、Java服务接口的定义与解析。

  接口使用AIDL语言定义在.aidl文件中,会编译生成对应接口名称的Java文件。其中

  I****Service.Stub 描述一个Java服务,需要被继承,以实现具体的业务。

    onTransact用来实现进程间通信。

    asInterface将一个BinderProxy包装为I****Service.Stub.Proxy。

  I****Service.Stub.Proxy 描述一个Java服务代理对象

三、Java服务的启动过程

  1、初始化,主要是在其父类Binder中调用init,进而通过android_os_Binder_init,在C++层中创建JavaBBinderHolder,并将其保存在了gBinderOffsets.mObject中。

  2、将服务注册到ServiceManager中,调用ServiceManager的addService即可

四、Java服务代理对象的获取

  使用ServiceManagerJava服务代理的getService

五、Java服务的调用

  通过获得的服务代理,实际上暴露的为服务的接口,调用对应的功能。

综上:

  android中Binder通信机制大体分为三层:

  Java层封装的Binder: 使用JNI调用,实际上是通过C++层的Binder代理对象向Binder本地对象发出通信请求。

  ==============================================================

  C++层的服务实现: Binder代理对象经由Binder驱动程序向Binder本地对象请求具体的操作,Binder本地对象

  也可能会调用Java层的服务来完成功能。

  ==============================================================

  Binder驱动程序,其实就是一个代理进程与服务进程交流的工具,一个传话筒,不负责具体的业务,其实现本质就是

  向内核缓冲区写入定义好的命令协议代码和返回协议代码来协调C++和Java层的Server提供服务。

    

  

 

android binder 进程间通信机制6-Binder进程间通信机制的JAVA接口的更多相关文章

  1. Android系统进程间通信Binder机制在应用程序框架层的Java接口源代码分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6642463 在前面几篇文章中,我们详细介绍了A ...

  2. 浅谈Android系统进程间通信(IPC)机制Binder中的Server和Client获得Service Manager接口之路

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6627260 在前面一篇文章浅谈Service ...

  3. android 进程间通信 messenger 是什么 binder 跟 aidl 区别 intent 进程间 通讯? android 消息机制 进程间 android 进程间 可以用 handler么 messenger 与 handler 机制 messenger 机制 是不是 就是 handler 机制 或 , 是不是就是 消息机制 android messenge

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha messenger 是什么 binder 跟 aidl 区别 intent 进程间 通讯 ...

  4. android binder 进程间通信机制2 - Binder进程间通信库实现原理

    1.Service组件 使用模板类BnInterface描述,称为Binder本地对象,对应于Binder驱动程序中的Binder实体对象 实现原理图如下:

  5. [置顶] 深入理解android之IPC机制与Binder框架

    [android之IPC机制与Binder框架] [Binder框架.Parcel.Proxy-Stub以及AIDL] Abstract [每个平台都会有自己一套跨进程的IPC机制,让不同进程里的两个 ...

  6. 深入理解Android IPC机制之Binder机制

    Binder是Android系统进程间通信(IPC)方式之一.Linux已经拥有的进程间通信IPC手段包括(Internet Process Connection): 管道(Pipe).信号(Sign ...

  7. Android : 跟我学Binder --- (1) 什么是Binder IPC?为何要使用Binder机制?

    目录: Android : 跟我学Binder --- (1) 什么是Binder IPC?为何要使用Binder机制? Android : 跟我学Binder --- (2) AIDL分析及手动实现 ...

  8. Android Binder机制(一) Binder的设计和框架

    这是关于Android中Binder机制的一系列纯技术贴.花了一个多礼拜的时间,才终于将其整理完毕.行文于此,以做记录:也是将自己所得与大家分享.和以往一样,介绍Binder时,先讲解框架,然后再从设 ...

  9. SEAndroid安全机制对Binder IPC的保护分析

    在SEAndroid安全机制中,除了文件和属性,还有Binder IPC须要保护.Binder IPC是Android系统的灵魂,使用得相当广泛又频繁.比如,应用程序都是Binder IPC请求訪问系 ...

随机推荐

  1. codeforces C. Design Tutorial: Make It Nondeterministic

    题意:每一个人 都有frist name 和 last name! 从每一个人的名字中任意选择 first name 或者 last name 作为这个人的编号!通过对编号的排序,得到每一个人 最终顺 ...

  2. [git]使用GPG签名你的commit

    概述 GPG是一种加密算法,现在github支持commit使用GPG加密,从而保证提交的commit在传输的过程中没有被篡改. 一.生成GPG密钥 什么是GPG:阮一峰的GPG教程 安装GPG:br ...

  3. 配置内存中OLTP文件组提高性能

    在今天的文章里,我想谈下使用内存中OLTP的内存优化文件组来获得持久性,还有如何配置它来获得高性能.在进入正题前,我想简单介绍下使用你数据库里这个特定文件组,内存OLTP是如何获得持久性的. 内存中O ...

  4. JS魔法堂:阻止元素被选中

    一.前言 在为IE5.5~9polyfill HTML5新特性placeholder时需要阻止元素被选中,因此在网上.书上查阅相关资料,记录在此以便日后查阅. 二.IE10+实现方式──CSS3 .u ...

  5. 【团队冲刺总结】一个编码人员的反(tu)思(cao)

    消失了半个多月了啊,算算时间,好像确实有近个把月没有好好的写博客来了.我一直很想写博客的,之前有老师问过写博客的动力是什么.我想了想,我觉得可能是我比较喜欢看书吧,不管是专业书还是小说(好吧,我承认, ...

  6. Struts2文件上传(基于表单的文件上传)

    •Commons-FileUpload组件 –Commons是Apache开放源代码组织的一个Java子项目,其中的FileUpload是用来处理HTTP文件上传的子项目   •Commons-Fil ...

  7. 线段树 + 矩阵 --- ZOJ 3772 Calculate the Function

    Calculate the Function Problem's Link:   http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCod ...

  8. [移动开发]全面理解UnityUI系统

    随着 Unity 4.6 发布,新 UI 系统终于与大家见面了. RectTransform Unity UI 系统使用 RectTransform 实现基本的布局和层次控制.RectTransfor ...

  9. 【JS复习笔记】02 对象与函数

    好吧,因为很重要的事情,几天没写笔记了. 关于对象: ||可以用来填充默认值,如:myApp.name || "无" &&可以用来避免错误,myApp.NameOb ...

  10. 重新想象 Windows 8 Store Apps (47) - 多线程之线程同步: Semaphore, CountdownEvent, Barrier, ManualResetEvent, AutoResetEvent

    [源码下载] 重新想象 Windows 8 Store Apps (47) - 多线程之线程同步: Semaphore, CountdownEvent, Barrier, ManualResetEve ...