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提供服务。
android binder 进程间通信机制6-Binder进程间通信机制的JAVA接口的更多相关文章
- Android系统进程间通信Binder机制在应用程序框架层的Java接口源代码分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6642463 在前面几篇文章中,我们详细介绍了A ...
- 浅谈Android系统进程间通信(IPC)机制Binder中的Server和Client获得Service Manager接口之路
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6627260 在前面一篇文章浅谈Service ...
- 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 进程间 通讯 ...
- android binder 进程间通信机制2 - Binder进程间通信库实现原理
1.Service组件 使用模板类BnInterface描述,称为Binder本地对象,对应于Binder驱动程序中的Binder实体对象 实现原理图如下:
- [置顶] 深入理解android之IPC机制与Binder框架
[android之IPC机制与Binder框架] [Binder框架.Parcel.Proxy-Stub以及AIDL] Abstract [每个平台都会有自己一套跨进程的IPC机制,让不同进程里的两个 ...
- 深入理解Android IPC机制之Binder机制
Binder是Android系统进程间通信(IPC)方式之一.Linux已经拥有的进程间通信IPC手段包括(Internet Process Connection): 管道(Pipe).信号(Sign ...
- Android : 跟我学Binder --- (1) 什么是Binder IPC?为何要使用Binder机制?
目录: Android : 跟我学Binder --- (1) 什么是Binder IPC?为何要使用Binder机制? Android : 跟我学Binder --- (2) AIDL分析及手动实现 ...
- Android Binder机制(一) Binder的设计和框架
这是关于Android中Binder机制的一系列纯技术贴.花了一个多礼拜的时间,才终于将其整理完毕.行文于此,以做记录:也是将自己所得与大家分享.和以往一样,介绍Binder时,先讲解框架,然后再从设 ...
- SEAndroid安全机制对Binder IPC的保护分析
在SEAndroid安全机制中,除了文件和属性,还有Binder IPC须要保护.Binder IPC是Android系统的灵魂,使用得相当广泛又频繁.比如,应用程序都是Binder IPC请求訪问系 ...
随机推荐
- zoj 3261 Connections in Galaxy War
点击打开链接zoj 3261 思路: 带权并查集 分析: 1 题目说的是有n个星球0~n-1,每个星球都有一个战斗值.n个星球之间有一些联系,并且n个星球之间会有互相伤害 2 根本没有思路的题,看了网 ...
- 自己动手模拟百分百<select>下拉列表
浏览器默认的下拉确实不好用啊,主要是样式不好修改和统一. (一)下手之前先理清一下<select>的流程: 1.结构:<select> <option value=&qu ...
- 受限玻尔兹曼机(RBM)学习笔记(七)RBM 训练算法
去年 6 月份写的博文<Yusuke Sugomori 的 C 语言 Deep Learning 程序解读>是囫囵吞枣地读完一个关于 DBN 算法的开源代码后的笔记,当时对其中涉及的算 ...
- Node.app – 用于 iOS App 开发的 Node.js 解释器
Node.app 是用于 iOS 开发的 Node.js 解释器,它允许最大的代码重用和快速创新,占用资源很少,为您的移动应用程序提供 Node.js 兼容的 JavaScript API.你的客户甚 ...
- IT人的自我导向型学习:学习的1个理念和2个心态
本文更新版本已挪至 http://www.zhoujingen.cn/blog/2484.html ----------------------------- 写这一个系列之前,我定位是与高效学习有 ...
- Android 学习笔记多媒体技术之 Drawable类+Tween(补间动画)+Frame(帧动画)
学习内容: 1.了解Drawable类的作用 2.如何使用Drawable... 3.了解Tween动画... 4.如何创建和使用Tween动画... 1.Drawable类... Drawabl ...
- 当我们安装使用时,会出现eclipse启动不了,出现“Java was started but returned exit code=13......”的问题
安装win8.1后,启动eclipse,也会提示 "java was started but returned exit code=13" 可能是eclipse.ini配置文件错误 ...
- SqlServer根据时段统计数据
create table ST_PPTN_R_Real ( TID int primary key identity(1,1), STCD varchar(100) not null, TM date ...
- ASP.NET MVC进阶二
一.数据验证 数据验证的步骤 在模型类中添加与验证相关的特性标记 在客户端导入与验证相关的js文件和css文件 使用与验证相关的Html辅助方法 在服务器端判断是否通过服务器端验证 常用的验证标记 R ...
- jquery 回到 顶部
1. 页面内容较多, 从底部超链接 点击回到页面顶部 // 回到顶部 var $top = $('<a class="doc-gotop" href="javasc ...