android binder 进程间通信机制6-Binder进程间通信机制的JAVA接口

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提供服务。

    

  

 

时间: 2024-08-29 12:08:22

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

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

文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6642463 在前面几篇文章中,我们详细介绍了Android系统进程间通信机制Binder的原理,并且深入分析了系统提供的Binder运行库和驱动程序的 源代码.细心的读者会发现,这几篇文章分析的Binder接口都是基于C/C++语言来实现的,但是我们在编写应用程序都是基于Java语言的,那么,我 们如何使用Java语言来使用系统的Binder机

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

文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6627260 在前面一篇文章浅谈Service Manager成为Android进程间通信(IPC)机制Binder守护进程之路中,介绍了Service Manager是如何成为Binder机制的守护进程的.既然作为守护进程,Service Manager的职责当然就是为Server和Client服务了.那么,Server和Client如何获得S

Android系统篇之----Binder机制和远程服务调用机制分析

一.前景概要 最近要实现Android中免注册Activity就可以运行的问题,那么结果是搞定了,就是可以不用在AndroidManifest.xml中声明这个Activity即可运行,主要是通过骗取系统,偷龙转凤技术的,这个知识点后面会详细讲解的,因为在研究了这个问题过程中遇到了很多知识点,当然最重要也是最根本的就是Android中的Binder机制和远程服务调用机制,而关于Binder机制的话,在Android中算是一个非常大的系统架构模块了,光这篇文章是肯定不能讲解到全部的,而且本人也不是

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

Binder是Android系统进程间通信(IPC)方式之一.Linux已经拥有的进程间通信IPC手段包括(Internet Process Connection): 管道(Pipe).信号(Signal)和跟踪(Trace).插口(Socket).报文队列(Message).共享内存(Share Memory)和信号量(Semaphore).本文详细介绍Binder作为Android主要IPC方式的优势. Binder机制概述: 基于Client-Server的通信方式广泛应用于从互联网和数据

Android—Camera Client/Server的binder IPC机制

本文首先参考Android Binder IPC分析一文分析了Android Binder IPC通信机制过程及涉及到的各个子元素相关概念,从代码细节脱离出来,因而整体上把握Android binder IPC通信机制,是能够理解文章最后Camera Framework进程间通信实现的基础.参考Android 4.4版本源码. Binder通信概述 Android进程间通信(Inter-Process Communication, IPC)采用binder通信机制,是一种client/serve

Android : 跟我学Binder ---- (1) 什么是Binder机制?

一.引言 如果把Android系统比作一幅精美绝伦的画,那Binder则是其浓墨重彩的独特一笔.初步了解过的人应该知道Binder是Android核心进程间通信(IPC:Internet Process Connection)手段之一,它是基于开源的 OpenBinder 实现,OpenBinder 起初由 Be Inc. 开发,后由 Plam Inc. 接手.从字面上来解释 Binder 有胶水.粘合剂的意思,顾名思义就是粘和不同的进程,使之实现通信.而日常开发中涉及到的如:AIDL.插件化编

android当中Binder机制,Looper与MessageQueue机制

上周四讨论内容:android 当中Binder机制,Looper与MessageQueue相关知识,相关链接: http://blog.csdn.net/innost/article/details/6124685 http://blog.csdn.net/innost/article/details/6055793 android当中Binder机制,Looper与MessageQueue机制,布布扣,bubuko.com

Android Binder机制(1):Binder架构分析

从这篇博客开始,将进入Binder机制的分析系列,顺序是先讲解Binder机制的框架,理解了整体思想后,再深入分析各层的细节实现,最后会实现一个自己的本地服务. 1.Binder的历史 BeOS是Be公司在1991年开发的运行在BeBOX硬件上的一款操作系统,与同期的其他操作系统不同,它是一款基于GUI设计的操作系统. George Hoffman(在LinkedIn上可以找到这哥们,简直是活着的传奇)当时任Be公司的工程师,他启动了一个名为OpenBinder的项目,该项目的宗旨是研究一个高效

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

在SEAndroid安全机制中,除了文件和属性,还有Binder IPC需要保护.Binder IPC是Android系统的灵魂,使用得相当广泛又频繁.例如,应用程序都是Binder IPC请求访问系统服务和资源.因此,SEAndroid安全机制必须要为Binder IPC保驾护航,阻止一个进程非法访问其它进程的服务和资源.本文就详细分析SEAndroid安全机制对Binder IPC提供的支持. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! 关于Bin