IBinder 接口
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
远程对象的基本接口,这是轻型远程过程调用机制的核心部分,设计用于执行进程内和跨进程调用时实现高性能。
[Android.Runtime.Register("android/os/IBinder", "", "Android.OS.IBinderInvoker")]
public interface IBinder : Android.Runtime.IJavaObject, IDisposable, Java.Interop.IJavaPeerable
[<Android.Runtime.Register("android/os/IBinder", "", "Android.OS.IBinderInvoker")>]
type IBinder = interface
interface IJavaObject
interface IDisposable
interface IJavaPeerable
- 派生
- 属性
- 实现
注解
远程对象的基本接口,这是轻型远程过程调用机制的核心部分,设计用于执行进程内和跨进程调用时实现高性能。 此接口描述用于与可远程对象交互的抽象协议。 不要直接实现此接口,而是从 Binder
中扩展。
密钥 IBinder API #transact transact()
匹配 Binder#onTransact Binder.onTransact()
。 这些方法允许你发送对 IBinder 对象的调用,并分别接收传入 Binder 对象的调用。 此事务 API 是同步的,因此在目标返回之前,调用 #transact transact()
不会返回 Binder#onTransact Binder.onTransact()
;这是调用本地进程中存在的对象时的预期行为,并且基础进程间通信 (IPC) 机制可确保在跨进程时应用这些相同的语义。
通过 transact() 发送的数据是一种 Parcel
通用数据缓冲区,还维护有关其内容的一些元数据。 元数据用于管理缓冲区中的 IBinder 对象引用,以便在缓冲区跨进程移动时维护这些引用。 此机制可确保当 IBinder 写入一个包裹并发送到另一个进程时,如果该其他进程将引用发送到同一 IBinder 返回到原始进程,则原始进程将接收相同的 IBinder 对象返回。 这些语义允许 IBinder/Binder 对象用作唯一标识(用作令牌或用于其他目的),这些标识可以跨进程进行管理。
系统维护其运行的每个进程中的事务线程池。 这些线程用于调度来自其他进程的所有 IPC。 例如,当 IPC 从进程 A 到处理 B 时,事务处理()中的 A 块中的调用线程将事务发送到进程 B。B 中的下一个可用池线程接收传入的事务,对目标对象调用 Binder.onTransact(),并使用结果“包裹”进行答复。 收到其结果后,进程 A 中的线程将返回以允许其执行继续。 实际上,其他进程似乎用作未在自己的进程中执行的其他线程。
Binder 系统还支持跨进程递归。 例如,如果进程 A 对 A 中实现的 IBinder 执行事务处理,并在处理该事务时处理 B,则当前等待原始事务完成的 A 中的线程将负责调用 B 所调用对象的 Binder.onTransact()。这可确保在调用远程绑定器对象时递归语义与调用本地对象时相同。
使用远程对象时,通常需要了解它们不再有效的时间。 有三种方法可以确定:<ul<>li> 此方法#transact transact()
将引发RemoteException
异常(如果尝试在进程不再存在的 IBinder 上调用它)。 <#pingBinder()
可以调用此方法>,如果远程进程不再存在,将返回 false。 <li> 此方法 #linkToDeath linkToDeath()
可用于向 IBinder 注册 a DeathRecipient
,在 IBinder 的包含进程消失时将调用该方法。 </ul>
适用于 . 的 android.os.IBinder
Java 文档
本页的某些部分是根据 Android 开放源代码项目创建和共享的工作进行的修改,并根据 Creative Commons 2.5 属性许可证中所述的术语使用。
字段
DumpTransaction |
IBinder 协议事务代码:转储内部状态。 |
FirstCallTransaction |
可用于用户命令的第一个事务代码。 |
InterfaceTransaction |
IBinder 协议事务代码:针对事务规范接口描述符询问事务的接收方。 |
LastCallTransaction |
可用于用户命令的最后一个事务代码。 |
LikeTransaction |
IBinder 协议事务代码:以异步方式告诉应用调用方喜欢它。 |
PingTransaction |
IBinder 协议事务代码:pingBinder()。 |
TweetTransaction |
IBinder 协议事务代码:将推文发送到目标对象。 |
属性
Handle |
获取基础 Android 对象的 JNI 值。 (继承自 IJavaObject) |
InterfaceDescriptor |
获取此绑定器支持的接口的规范名称。 |
IsBinderAlive |
检查绑定器是否仍处于活动状态。 |
JniIdentityHashCode |
返回包装实例的值 |
JniManagedPeerState |
托管对等方的状态。 (继承自 IJavaPeerable) |
JniPeerMembers |
成员访问和调用支持。 (继承自 IJavaPeerable) |
PeerReference |
返回 JniObjectReference 包装的 Java 对象实例。 (继承自 IJavaPeerable) |
SuggestedMaxIpcSizeBytes |
应针对 IPC 大小施加的限制(以字节为单位)以使其安全保持在事务缓冲区限制之下。 |
方法
Disposed() |
在释放实例时调用。 (继承自 IJavaPeerable) |
DisposeUnlessReferenced() |
如果没有对此实例的未完成引用,则调用 |
Dump(FileDescriptor, String[]) |
将对象的状态打印到给定流中。 |
DumpAsync(FileDescriptor, String[]) |
就像 |
Finalized() |
在实例完成时调用。 (继承自 IJavaPeerable) |
LinkToDeath(IBinderDeathRecipient, Int32) |
如果此绑定器消失,请注册收件人以获取通知。 |
PingBinder() |
检查对象是否仍然存在。 |
QueryLocalInterface(String) |
尝试检索此 Binder 对象的接口的本地实现。 |
SetJniIdentityHashCode(Int32) |
设置由 |
SetJniManagedPeerState(JniManagedPeerStates) |
远程对象的基本接口,这是轻型远程过程调用机制的核心部分,设计用于执行进程内和跨进程调用时实现高性能。 (继承自 IJavaPeerable) |
SetPeerReference(JniObjectReference) |
设置由 |
Transact(Int32, Parcel, Parcel, TransactionFlags) |
对对象执行泛型操作。 |
UnlinkToDeath(IBinderDeathRecipient, Int32) |
删除以前注册的死亡通知。 |
UnregisterFromRuntime() |
取消注册此实例,以便运行时不会从将来 Java.Interop.JniRuntime+JniValueManager.PeekValue 的调用中返回它。 (继承自 IJavaPeerable) |
扩展方法
JavaCast<TResult>(IJavaObject) |
执行 Android 运行时检查的类型转换。 |
JavaCast<TResult>(IJavaObject) |
远程对象的基本接口,这是轻型远程过程调用机制的核心部分,设计用于执行进程内和跨进程调用时实现高性能。 |
GetJniTypeName(IJavaPeerable) |
远程对象的基本接口,这是轻型远程过程调用机制的核心部分,设计用于执行进程内和跨进程调用时实现高性能。 |