android IBinder 解析
来源:互联网 发布:淘宝订单待清洗 编辑:程序博客网 时间:2024/05/16 15:27
http://home.lupaworld.com/home-space-uid-42237-do-blog-id-232429.html
远程对象的基础接口,是一个为了在执行进程中和进程间调用时的高性能,而设计的轻量级远程调用机制的核心部分。这个接口描述了和远程对象交互的抽象协议。不要直接实现这个接口,而是通过继承Binder来实现。
IBinder的关键API是与 Binder.on
通过transact()送出的数据是一个 Parcel,一个通常的数据缓冲器,并且包含一些关于他内容的元数据。这些元数据用来在缓冲期内管理IBinder对象的引用,以至于那些引用可以在缓冲器穿越进程时被包含进来。这个机制可以确保了当一个IBinder被写入一个Parcel被传送给其他进程时,如果其他进程返回给原先进程同样的IBinder引用,原先的进程接收同样的IBinder对象。这些语义允许IBinder/Binder对象被用作进程间切换时管理的唯一的身份(作为一个标志或其他目的来服务)。
系统在每一个事务线程运行的进程里维护了一个事务线程池。这些线程用来分发所有来自其他进程的IPCs。例如,当一个IPC从A进程到B进程被建立,在A里的调用线程用transact()向进程B发出一个事务。在B中下一个有效的线程池接收到进入的事务,对目标对象调用Binder.on
Binder系统也支持进程间的递归调用。例如,如果进程A执行一个到进程B的事务,并且进程B在处理这个事务时对一个在A里实现的IBinder调用transact(),然后在A里的正在等待原先事务结束的线程,将会关心对被B调用的对象调用Binder.on
当和远程对象打交道时,你经常想要找出何时他们不再有效。下面有三条可以被确定的方式:
- 当你试图对一个所属进程已经不存在的IBinder调用transact()方法时,会抛出一个RemoteException异常。
- pingBinder()可以被调用,并且如果远程进程不再存在会返回假。
- linkToDeath()方法可以用来用这个IBinder注册一个IBinder.DeathRecipient ,当他包含的进程消失的时候被调用。
请参阅
- Binder
概要
常量
公共方法
String getInterfaceDescriptor() 获得被这个binder支持的接口的规范名字。 boolean isBinderAlive() 检查binder所在的进程是否还是存在的。 void linkToDeath(IBinder.DeathRecipientrecipient, int flags) 如果这个binder消失,为标志信息注册一个接收器。 boolean pingBinder() 检查是否这个对象还存在。 IInterface queryLocalInterface(Stringdescriptor) 试图获得一个对这个Binder对象的一个接口的本地实现。 boolean transact(intco内容
常量
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在调用死亡前是不会死亡的。
异常
请参阅
- unlinkToDeath(IBinder.DeathRecipient,int)
public boolean pingBinder()
返回值
- 如果服务进程已经消失则返回假值,否则结果被pingBinder()在另一边实现返回(通常默认的是真值)。
public IInterfacequeryLocalInterface(Stringdescriptor)
public boolean transact(intcode, Parceldata, Parcelreply, int flags)
参数
异常
public boolean unlinkToDeath(IBinder.DeathRecipientrecipient, int flags)
清除一个之前注册的死亡标识信息。如果这个对象已经死亡,这个接收器将不再被调用。返回值
- 如果接收器成功被断开连接则返回真,你必须确保他的 DeathRecipient.binderDied()方法没有被调用。如果目标IBinder已经死亡则返回假值,意味着这个方法已经(或将要)被调用。
异常
- android IBinder 解析
- android IBinder 解析
- android的IBINDER机制
- Android:Parcelable/Bundle/IBinder
- Android开发:什么是IBinder
- Android开发:什么是IBinder
- Android开发:什么是IBinder
- Android开发:什么是IBinder
- Android开发:什么是IBinder
- Android开发:什么是IBinder
- android Ibinder 体系
- Android开发:什么是IBinder
- Android源码 · IBinder
- Android开发:什么是IBinder
- android中IBinder
- Android开发:什么是IBinder
- IBinder
- IBinder
- skyeye模拟u-boot在s3c2410上运行
- 人机界面的测试
- 设置网站只能通过域名访问,不能通过IP访问
- Android开发之——activity跳转
- 我需要这个环境
- android IBinder 解析
- UIImageView圆角,自适应图片宽高比例,图片拉伸,缩放比例和图片缩微图
- SQL 操作
- python异常简单使用方法
- 你的未来你想过?Linux和windows之见!
- cocos2d 如何实现 翻牌效果
- (64位)Ubuntu下Android开发环境搭建
- tomcat下配置虚拟目录
- 如何将sql server 2000的数据库还原到sql server 2005里使用?