IBinder 接口

定义

远程对象的基本接口,这是轻型远程过程调用机制的核心部分,设计用于执行进程内和跨进程调用时实现高性能。

[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.IBinderJava 文档

本页的某些部分是根据 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

返回包装实例的值 java.lang.System.identityHashCode()

(继承自 IJavaPeerable)
JniManagedPeerState

托管对等方的状态。

(继承自 IJavaPeerable)
JniPeerMembers

成员访问和调用支持。

(继承自 IJavaPeerable)
PeerReference

返回 JniObjectReference 包装的 Java 对象实例。

(继承自 IJavaPeerable)
SuggestedMaxIpcSizeBytes

应针对 IPC 大小施加的限制(以字节为单位)以使其安全保持在事务缓冲区限制之下。

方法

Disposed()

在释放实例时调用。

(继承自 IJavaPeerable)
DisposeUnlessReferenced()

如果没有对此实例的未完成引用,则调用 Dispose();否则不执行任何操作。

(继承自 IJavaPeerable)
Dump(FileDescriptor, String[])

将对象的状态打印到给定流中。

DumpAsync(FileDescriptor, String[])

就像 #dump(FileDescriptor, String[]) ,但始终异步执行。

Finalized()

在实例完成时调用。

(继承自 IJavaPeerable)
LinkToDeath(IBinderDeathRecipient, Int32)

如果此绑定器消失,请注册收件人以获取通知。

PingBinder()

检查对象是否仍然存在。

QueryLocalInterface(String)

尝试检索此 Binder 对象的接口的本地实现。

SetJniIdentityHashCode(Int32)

设置由 JniIdentityHashCode. 返回的值。

(继承自 IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

远程对象的基本接口,这是轻型远程过程调用机制的核心部分,设计用于执行进程内和跨进程调用时实现高性能。

(继承自 IJavaPeerable)
SetPeerReference(JniObjectReference)

设置由 PeerReference. 返回的值。

(继承自 IJavaPeerable)
Transact(Int32, Parcel, Parcel, TransactionFlags)

对对象执行泛型操作。

UnlinkToDeath(IBinderDeathRecipient, Int32)

删除以前注册的死亡通知。

UnregisterFromRuntime()

取消注册此实例,以便运行时不会从将来 Java.Interop.JniRuntime+JniValueManager.PeekValue 的调用中返回它。

(继承自 IJavaPeerable)

扩展方法

JavaCast<TResult>(IJavaObject)

执行 Android 运行时检查的类型转换。

JavaCast<TResult>(IJavaObject)

远程对象的基本接口,这是轻型远程过程调用机制的核心部分,设计用于执行进程内和跨进程调用时实现高性能。

GetJniTypeName(IJavaPeerable)

远程对象的基本接口,这是轻型远程过程调用机制的核心部分,设计用于执行进程内和跨进程调用时实现高性能。

适用于