Binder架构图: 先来瞅一下它的整体架构图: 其中粉红部分是上层的Binder,而蓝色的则是下层的Binder,很显然上层的是依赖于下层的. 什么是Binder[有个大概了解]? 这里从几个层面来说一下: 从IPC角度来说: 定义:Binder是Android中的一种跨进程通信方式,该通信方式在linux中没有,是Android独有的. 作用:在Android中实现跨进程通信. 从Android Driver层来说: 其实也就是指这一层: 定义:Binder还可以理解为一种虚拟的物理设备,它…
本文转载自;https://blog.csdn.net/u010164190/article/details/53015194 Android的binder机制提供一种进程间通信的方法,使一个进程可以以类似远程过程调用的形式调用另一个进程所提供的功能.binder机制在Java环境和C/C++环境都有提供. android的代码中,与C/C++的binder包括一些类型和接口的定义和实现,相关的代码在下面这几个文件中: frameworks\base\include\utils\IInterfa…
前言及知识准备 Binder驱动程序 Service组件的注册和启动 Clinet应用获取服务 本次主要介绍Android平台下Binder进程间机制.从机制的组成出发,将按照Binder驱动程序.Binder服务的注册和启动.Client应用获取服务三个方面来讲述.最后针对该模块提出了自己的问题以及思考 首先介绍Binder机制的组成. 第一部分就是Binder驱动程序,它存在于内核层,是服务提供者和服务使用者用来交互的"桥梁" 第二部分是server,顾名思义,是用来提供服务的 第…
1.Java和C++中的Binder 从前一篇 Binder机制,从Java到C (5. IBinder对象传递形式) 中可以看到,使用Binder的Java代码,到最后都会进入到Native环境,将具体的分发工作交给执行效率更高的Native代码.而这些Native的实现都会统一到一个lib:libbinder.在前面的讲述中,我们已经接触到了native中的JavaBBinder,BBinder,JavaBBinderHolder 把一些相关的类整理一下,可以得到下面Java和C++代码的关…
在第三篇 Binder机制,从Java到C (3. ServiceManager in Java) 中,讲到ServiceManager的Stub端在Native,Proxy端在Java.实际上,还要加一句:Native里也有Proxy(BpServiceManager),因为ServiceManager也是要服务于其他native service嘛. ServiceManager是一个在init.rc里定义的一个system process,在系统启动的时候,它就启动了.如果它挂了,那么像zy…
1.什么是NativeService Native Service,是通过C或C++代码写出來,提供给Java进行远程调用的RemoteService.向Android开机就启动的surfaceflinger,media都是native service. 在前一篇中,我們总结了Binder通信的整個流程:Java Proxy代码走到JNI实现的BinderProxy的transact()方法之后,就直接进入到Native实现的BpBinder,然后一直通过IPCThreadState对象发送Bi…
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6642463 在前面几篇文章中,我们详细介绍了Android系统进程间通信机制Binder的原理,并且深入分析了系统提供的Binder运行库和驱动程序的 源代码.细心的读者会发现,这几篇文章分析的Binder接口都是基于C/C++语言来实现的,但是我们在编写应用程序都是基于Java语言的,那么,我 们如何使用Java语言来使用系统的Binder机…
转载请标注:张小燕:http://www.cnblogs.com/zhangxinyan/p/3487381.html 前段时间一直在看有关Binder机制的内容,觉得受益匪浅,整理记录于此,大家请随意翻看. 当然这部分内容只是作为Binder的入门知识,如果想知道更详细的内容的话,就可能要更深入的看里面的代码了. 内容大概有分为几个部分,下面是outline,希望各位看起来不会太枯燥. 1. Binder机制,从Java到C (1. IPC in Application Remote Serv…
上一篇 Binder机制,从Java到C (2. IPC in System Service :AMS)  中提到 Application是通过ServiceManager找到了AMS 的service代理对象.那在这个之前当然是要先找到ServiceManager的代理对象,才能调用ServiceManager的服务嘛.下面就看看怎么来获得这个代理对象的吧: 还记得上一篇调用的ServiceManager的方法吧:IBinder b = ServiceManager.getService("a…
1.IBinder的传递 Binder IPC通信中,Binder是通信的媒介,Parcel是通信的內容.远程调用过程中,其参数都被打包成Parcel的形式來传递.IBinder对象当然也不例外,在前一篇 Binder机制,从Java到C (4. Parcel) 中说到IBinder对象是能够进行进程间传递的. 下面就看一下IBinder对象在传递过程中会有什么变化. 在IPC通信的Proxy端,我们经常可以看到下面类似的代码,一些参数都会打包到Parcel中.看下面的data和reply. p…