博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android Binder
阅读量:4074 次
发布时间:2019-05-25

本文共 1497 字,大约阅读时间需要 4 分钟。

由于Android的Java层级只是一个外壳框架而已,大部分的系统组件(Android本身)都是在Nataive层(又称C/C++层)执行。这是Android的整体架构,所以我们的应用程序也必须考虑分为两层的必要性,才能完全的融入Android的整体架构里。我们看到的Android应用架构(Application Framework)其实只是Android整体架构里的外壳结构而已。Android应用框架就如同椅子的椅面,那么椅子的椅腿在哪里呢?

兹以Android系统来举例说明!

Binder系统是在Native层的C/C++组件。Java应用程序(如Activity体系等)是透过JNI界面去呼叫Binder系统(或称为组件)。

在Android里有一个ServiceManager掌管Java层级的Service物体。例如:

OnCreate(){

IServiceManager is=ServiceManager.getIServiceManager();

}

此时,会立即呼叫ServiceManagerNative物件,然后透过JNI函数:

BinderInternal.getContextObject()

取得C/C++层的BpServiceManager物件之参考(Reference)。也就是说,is所参考到

ServiceManager物件是转而呼叫到C/C++层的BpServiceManager物件,提供实质的远距(Remote)的Service Binding的服务。

当ServiceManager取得(经由JNI)了C/C++层的BpServiceManager物件之参考后,Java层的Binder物件就利用此物体参考建立关联了。Java层的Binder物体也提供了IBinder界面给远距的Client来使用。Binder类别体系的物理内涵有Proxy(代理)和stub标准的远距沟通结构,由ServiceManager在Client端诞生一个Proxy物件,给Client端(如Acitivity)能透过IBinder界面或有AIDL语言所定义的界面来呼叫Proxy物件,再由Proxy来与C/C++层的远距Service物件进行高效率的通讯。

所以,ServiceManager的工作大部分是在C/C++层执行的。Java层级的物件,以JNI方式呼叫C/C++层的Binder系统。

记得,Android的ServiceManager本身也是一个系统服务,它也是在Linux的一个进程(Process)里执行,这称为Service manager progress。从Java层的ServiceManager呼叫(JNI)到C/C++层的BpServiceManager之后,BpServiceManager还是将讯息转交到service manager progress里的组件。

由于椅腿直接地接触滴接触地面(即硬体Linux),所以椅腿的技术决定椅子是否会稳定的关键因素。

注意事项:

1.维持一面的完整和稳定是首要目标,唯有如此,才能吸引众多的Android应用程序,进而吸引广大的手机用户

2.修正椅腿来配置地面(硬体),又能支撑椅面的完整。


对于Android而言,使用JNI介面是不是一种违章建筑(即不属于Android构架的一环)呢?修正应该很明了了,以Binder系统为例说明JNI也是Android系统本身的核心机制之一,应该不算是违章建筑!

转载地址:http://rayleeya.iteye.com/blog/658280

你可能感兴趣的文章
编译Android4.0源码时常见错误及解决办法
查看>>
Android 源码编译make的错误处理
查看>>
linux环境下C语言中sleep的问题
查看>>
ubuntu 12.04 安装 GMA3650驱动
查看>>
新版本的linux如何生成xorg.conf
查看>>
xorg.conf的编写
查看>>
启用SELinux时遇到的问题
查看>>
virbr0 虚拟网卡卸载方法
查看>>
No devices detected. Fatal server error: no screens found
查看>>
新版本的linux如何生成xorg.conf
查看>>
virbr0 虚拟网卡卸载方法
查看>>
Centos 6.0_x86-64 终于成功安装官方显卡驱动
查看>>
Linux基础教程:CentOS卸载KDE桌面
查看>>
db sql montior
查看>>
read humor_campus
查看>>
IBM WebSphere Commerce Analyzer
查看>>
Unix + OS IBM Aix FTP / wu-ftp / proftp
查看>>
my read work
查看>>
db db2 base / instance database tablespace container
查看>>
hd disk / disk raid / disk io / iops / iostat / iowait / iotop / iometer
查看>>