IBinder类的中文翻译
远程对象的基础接口,是一个为了在执行进程中和进程间调用时的高性能,而设计的轻量级远程调用机制的核心部分。这个接口描述了和远程对象交互的抽象协议。不要直接实现这个接口,而是通过继承Binder来实现。
IBinder的关键API是与 Binder.onTransact()相匹配的transact().这个方法分别允许你给IBinder对象发出一个请求,并接收一个进入一个Binder对象的请求。这个事务API是同步的,这样一个对transact()的调用会在目标从Binder.onTransact()返回后自己才能返回;这是在调用一个存在于本地进程对象的预期行为,并且潜在的IPC(进程间通信机制)也在进程间切换时确保这些相同语义得到应用。
通过transact()送出的数据是一个 Parcel,一个通常的数据缓冲器,并且包含一些关于他内容的元数据。这些元数据用来在缓冲期内管理IBinder对象的引用,以至于那些引用可以在缓冲器穿越进程时被包含进来。这个机制可以确保了当一个IBinder被写入一个Parcel被传送给其他进程时,如果其他进程返回给原先进程同样的IBinder引用,原先的进程接收同样的IBinder对象。这些语义允许IBinder/Binder对象被用作进程间切换时管理的唯一的身份(作为一个标志或其他目的来服务)。
系统在每一个事务线程运行的进程里维护了一个事务线程池。这些线程用来分发所有来自其他进程的IPCs。例如,当一个IPC从A进程到B进程被建立,在A里的调用线程用transact()向进程B发出一个事务。在B中下一个有效的线程池接收到进入的事务,对目标对象调用Binder.onTransact(),并且用结果Parcel回复。在接收到结果时,在进程A中的线程返回以允许进程继续执行。效果上,其他进程看起来象作为那些你没有在自己进程中创建执行的额外线程而使用的。
Binder系统也支持进程间的递归调用。例如,如果进程A执行一个到进程B的事务,并且进程B在处理这个事务时对一个在A里实现的IBinder调用transact(),然后在A里的正在等待原先事务结束的线程,将会关心对被B调用的对象调用Binder.onTransact().这个就确保在调用远程binder对象时的递归语义和调用本地对象时是一样的。
当和远程对象打交道时,你经常想要找出何时他们不再有效。下面有三条可以被确定的方式:
- 当你试图对一个所属进程已经不存在的IBinder调用transact()方法时,会抛出一个RemoteException异常。
- pingBinder()可以被调用,并且如果远程进程不再存在会返回假。
- linkToDeath()方法可以用来用这个IBinder注册一个IBinder.DeathRecipient ,当他包含的进程消失的时候被调用。
| IBinder.DeathRecipient | 当服务一个IBinder的进程消失后接收一个回调的接口。 |
请参阅
概要
常量
| Value | ||||
|---|---|---|---|---|
| int | DUMP_TRANSACTION | IBinder事务协议码:清除内部状态 | 1598311760 | 0x5f444d50 |
| int | FIRST_CALL_TRANSACTION | 用户指令的第一个事务码可用。 | 1 | 0x00000001 |
| int | FLAG_ONEWAY | transact(int,Parcel, Parcel, int)标志符: 这是一个单向调用,意味着调用者会立即返回,而不等待从被调用者那里的结果。 | 1 | 0x00000001 |
| int | INTERFACE_TRANSACTION | IBinder事务协议码:向事务接收端询问他的规范接口描述符。 | 1598968902 | 0x5f4e5446 |
| int | LAST_CALL_TRANSACTION | 用户指令的最后一个事务码可用。 | 16777215 | 0x00ffffff |
| int | PING_TRANSACTION | IBinder事务协议码:pingBinder(). | 1599098439 | 0x5f504e47 |
公共方法
| String | getInterfaceDescriptor() | |||||
| 获得被这个binder支持的接口的规范名字。 | ||||||
| boolean | isBinderAlive() | |||||
| 检查binder所在的进程是否还是存在的。 | ||||||
| void | linkToDeath(IBinder.DeathRecipientrecipient, int flags) | |||||
| 如果这个binder消失,为标志信息注册一个接收器。 | ||||||
| boolean | pingBinder() | |||||
| 检查是否这个对象还存在。 | ||||||
| IInterface | queryLocalInterface(Stringdescriptor) | |||||
| 试图获得一个对这个Binder对象的一个接口的本地实现。 | ||||||
| boolean | transact(intcode,Parceldata, Parcelreply, int flags) | |||||
| 用对象执行一个一般的操作。 | ||||||
| boolean | unlinkToDeath(IBinder.DeathRecipientrecipient, int flags) | |||||
| 清除一个之前注册的死亡标识信息。 | ||||||
内容
常量
public static final intDUMP_TRANSACTION
public static final intFIRST_CALL_TRANSACTION
public static final intFLAG_ONEWAY
public static final intINTERFACE_TRANSACTION
public static final intLAST_CALL_TRANSACTION
public static final intPING_TRANSACTION
公共方法
public StringgetInterfaceDescriptor()
public booleanisBinderAlive()
返回值
- 如果进程不能在则返回假值。注意如果返回真值,进程可能在调用返回时已经死掉了。
public void linkToDeath(IBinder.DeathRecipientrecipient, int flags)
你将仅仅从远程binders那里接收到一个死亡标识信息,作为定义中的本地的binders在调用死亡前是不会死亡的。
异常
| RemoteException如果目标IBinder的进程已经死亡。 | |
| RemoteException |
public boolean pingBinder()
返回值
- 如果服务进程已经消失则返回假值,否则结果被pingBinder()在另一边实现返回(通常默认的是真值)。
public IInterfacequeryLocalInterface(Stringdescriptor)
public boolean transact(intcode, Parceldata, Parcelreply, int flags)
参数
| code | 执行的行为. 这将会是一个在 FIRST_CALL_TRANSACTION和 LAST_CALL_TRANSACTION之间的数字。 |
|---|---|
| data | 发送给目标的编组后的数据,通常不是null。如果你不传送任何数据,你必须在创建一个空的Parcel放在这里。 |
| reply | 来自目标被接收的编组后的数据。如果你对返回值不感兴趣可能返回null。 |
| flags | 额外的操作符。0是通常意义的RPC,或者 FLAG_ONEWAY表示一个单向RPC. |
public boolean unlinkToDeath(IBinder.DeathRecipientrecipient, int flags)
清除一个之前注册的死亡标识信息。如果这个对象已经死亡,这个接收器将不再被调用。
返回值
- 如果接收器成功被断开连接则返回真,你必须确保他的 DeathRecipient.binderDied()方法没有被调用。如果目标IBinder已经死亡则返回假值,意味着这个方法已经(或将要)被调用。
异常
| NoSuchElementException如果给定的接收器还没有和IBinder注册,并且这个IBinder还活着。注意如果接收器从来没有被注册过,但是IBinder已经死亡,这个异常将不会抛出,你会接收到一个假值作为返回值。 |
IBinder类的中文翻译的更多相关文章
- 《Entity Framework 6 Recipes》中文翻译系列 目录篇 -持续更新
为了方便大家的阅读和学习,也是响应网友的建议,在这里为这个系列做一个目录.在目录开始这前,我先来回答之前遇到的几个问题. 1.为什么要学习EF? 这个问题很简单,项目需要.这不像学校,没人强迫你学习! ...
- Spark官方文档 - 中文翻译
Spark官方文档 - 中文翻译 Spark版本:1.6.0 转载请注明出处:http://www.cnblogs.com/BYRans/ 1 概述(Overview) 2 引入Spark(Linki ...
- Spark SQL 官方文档-中文翻译
Spark SQL 官方文档-中文翻译 Spark版本:Spark 1.5.2 转载请注明出处:http://www.cnblogs.com/BYRans/ 1 概述(Overview) 2 Data ...
- 苹果App Store审核指南中文翻译(2014.9.1更新)
转:http://www.cocoachina.com/appstore/20140901/9500.html CocoaChina对<苹果应用商店审核指南>中文翻译最近一次更新时间为20 ...
- 《Introduction to Tornado》中文翻译计划——第五章:异步Web服务
http://www.pythoner.com/294.html 本文为<Introduction to Tornado>中文翻译,将在https://github.com/alioth3 ...
- Objective-C 编程艺术 (Zen and the Art of the Objective-C Craftsmanship 中文翻译)
# 禅与 Objective-C 编程艺术 (Zen and the Art of the Objective-C Craftsmanship 中文翻译) - 原文 <https://githu ...
- 《Django By Example》第九章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者@ucag 注:哈哈哈,第九章终于来啦 ...
- 【转】苹果App Store审核指南中文翻译(更新)
(注:<苹果应用商店审核指南>中文翻译最近一次更新为2013-03-04,文中红色部分是相对于2013-03-04版本的新增内容,绿色部分代表更改的内容,蓝色表示苹果相关官方文档的链接.) ...
- Next.js v4.1.4 文档中文翻译【转载】
最近想稍稍看下 React的 SSR框架 Next.js,因为不想看二手资料, 所以自己跑到 Github上看,Next.js的文档是英文的,看倒是大概也能看得懂, 但有些地方不太确定,而且英文看着毕 ...
随机推荐
- 2014年的Google I/O app设计中的材料设计-渣渣的翻译
又是一篇翻译,用了三个多小时.http://android-developers.blogspot.co.id/2014/08/material-design-in-2014-google-io-ap ...
- 解构控制反转(IoC)和依赖注入(DI)
1.控制反转 控制反转(Inversion of Control,IoC),简言之就是代码的控制器交由系统控制,而不是在代码内部,通过IoC,消除组件或者模块间的直接依赖,使得软件系统的开发更具柔性和 ...
- html-----013----实体字符/HTML URL 编码
<!DOCTYPE> 声明 版本 年份 HTML 1991 HTML+ 1993 HTML 2.0 1995 HTML 3.2 1997 HTML 4.01 1999 XHTML 1.0 ...
- C++数组(指针)作为函数参数
本文的学习内容参考:http://blog.csdn.net/wwdlk/article/details/6322843 1.当用数组名作为函数参数时,函数的实参和形参都应为数组名(或者指针): Ex ...
- Mac OS 安装 Port
简介 MacPorts类似与apt-get以及yum等软件包管理工具,可以方便的进行安装与卸载软件的功能,同时可以自动安装软件包的依赖,非常方便,同类的还有brew等工具. 安装 下载MacPorts ...
- MongoDB源码分析——mongod数据查询操作
源码版本为MongoDB 2.6分支 Edit mongod数据查询操作 在mongod的初始化过程中说过,服务端接收到客户端消息后调用MyMessageHandler::process函数处理消息. ...
- Java编写的C语言词法分析器
Java编写的C语言词法分析器 这是java编写的C语言词法分析器,我也是参考很多代码,然后核心代码整理起来,放在QQ空间和博客上,目的是互相学习借鉴,希望可以得到高手改进.这个词法分析器实现的功能有 ...
- 安装centos 6.7
安装centos 6.7 系统 首先系统安装引导,本次系统安装是通过虚拟机安装,与真是环境十分接近 系统引导后第一步是询问是否检测硬盘,选择不检测(Skip) 然后等待系统引导进入安装界面,进入后我们 ...
- (转) sphinx 高亮显示搜索词
http://hi.baidu.com/tewuapple/item/7a7bc34adbda24a8df2a9fe5 (转)
- leetcode problem 6 ZigZag Conversion
The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like ...