Most visited

Recently visited

Added in API level 1

Binder

public class Binder
extends Object implements IBinder

java.lang.Object
   ↳ android.os.Binder


可远程对象的基类,由IBinder定义的轻量级远程过程调用机制的核心部分。 这个类是IBinder的一个实现,它提供了这种对象的标准本地实现。

大多数开发人员不会直接实现此类,而是使用aidl工具来描述所需的接口,让它生成适当的Binder子类。 但是,您可以直接从Binder派生实现您自己的自定义RPC协议,或直接实例化原始Binder对象以用作可跨进程共享的令牌。

这个类只是一个基本的IPC原语; 它对应用程序的生命周期没有影响,只有在创建它的过程继续运行时才有效。 要正确使用此功能,您必须在顶层应用程序组件(一个上下文中这样做ServiceActivity ,或ContentProvider ),让系统知道你的过程中应保持运行。

您必须记住流程可能会消失的情况,因此需要稍后重新创建新的活页夹并在流程重新启动时重新附加它。 例如,如果您在Activity内使用此Activity ,则在活动未开始时您的活动进程可能会被Activity ; 如果稍后重新创建活动,则需要创建一个新的活页夹并将其重新发回到正确的位置; 您需要意识到您的流程可能因其他原因(例如接收广播)而被启动,这将不涉及重新创建活动并因此运行其代码以创建新的活页夹。

也可以看看:

Summary

Inherited constants

From interface android.os.IBinder

Public constructors

Binder()

默认构造函数初始化对象。

Public methods

void attachInterface(IInterface owner, String descriptor)

将特定界面与活页夹相关联的便捷方法。

static final long clearCallingIdentity()

在当前线程上重置传入IPC的身份。

void dump(FileDescriptor fd, String[] args)

实施调用更方便的版本 dump(FileDescriptor, PrintWriter, String[])

void dumpAsync(FileDescriptor fd, String[] args)

dump(FileDescriptor, String[])一样,但确保目标异步执行。

static final void flushPendingCommands()

将当前线程中挂起的所有Binder命令刷新到内核驱动程序。

static final int getCallingPid()

返回发送给您当前正在处理的事务的进程的ID。

static final int getCallingUid()

返回分配给向您发送当前正在处理的事务的进程的Linux uid。

static final UserHandle getCallingUserHandle()

返回分配给发送给当前正在处理的事务的进程的UserHandle。

String getInterfaceDescriptor()

默认实现返回一个空的接口名称。

boolean isBinderAlive()

检查绑定器所在的进程是否仍然存在。 请注意,如果您正在调用本地联编程序,则这总是返回true,因为如果您调用它,则您的进程仍处于活动状态。

static final void joinThreadPool()

将调用线程添加到IPC线程池。

void linkToDeath(IBinder.DeathRecipient recipient, int flags)

本地实施是无操作的。

boolean pingBinder()

默认实现总是返回true - 如果你在这里,对象是活着的。

IInterface queryLocalInterface(String descriptor)

使用提供给attachInterface()的信息返回关联的IInterface,如果它匹配请求的描述符。

static final void restoreCallingIdentity(long token)

将当前线程上的传入IPC的标识恢复为以前由 clearCallingIdentity()返回的 clearCallingIdentity()

final boolean transact(int code, Parcel data, Parcel reply, int flags)

默认实现倒回地块并调用onTransact。

boolean unlinkToDeath(IBinder.DeathRecipient recipient, int flags)

本地实施是无操作的。

Protected methods

void dump(FileDescriptor fd, PrintWriter fout, String[] args)

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

void finalize()

当垃圾收集确定没有更多对该对象的引用时,由对象上的垃圾回收器调用。

boolean onTransact(int code, Parcel data, Parcel reply, int flags)

默认实现是一个返回false的存根。

Inherited methods

From class java.lang.Object
From interface android.os.IBinder

Public constructors

Binder

Added in API level 1
Binder ()

默认构造函数初始化对象。

Public methods

attachInterface

Added in API level 1
void attachInterface (IInterface owner, 
                String descriptor)

将特定界面与活页夹相关联的便捷方法。 调用后,queryLocalInterface()将被实现,以便在请求相应的描述符时返回给定的所有者IInterface。

Parameters
owner IInterface
descriptor String

clearCallingIdentity

Added in API level 1
long clearCallingIdentity ()

在当前线程上重置传入IPC的身份。 如果在处理传入呼叫时,您将调用其他对象的接口,这些接口可能对您的进程是本地的,并且需要对进入它们的呼叫进行权限检查(以便他们将检查您自己的权限本地进程,而不是最初称为你的进程)。

Returns
long Returns an opaque token that can be used to restore the original calling identity by passing it to restoreCallingIdentity(long).

也可以看看:

dump

Added in API level 3
void dump (FileDescriptor fd, 
                String[] args)

实施调用更方便的版本 dump(FileDescriptor, PrintWriter, String[])

Parameters
fd FileDescriptor: The raw file descriptor that the dump is being sent to.
args String: additional arguments to the dump request.

dumpAsync

Added in API level 13
void dumpAsync (FileDescriptor fd, 
                String[] args)

dump(FileDescriptor, String[])一样,但确保目标异步执行。

Parameters
fd FileDescriptor: The raw file descriptor that the dump is being sent to.
args String: additional arguments to the dump request.

flushPendingCommands

Added in API level 1
void flushPendingCommands ()

将当前线程中挂起的所有Binder命令刷新到内核驱动程序。 在执行可能会阻塞很长时间的操作之前调用这个函数可能很有用,以确保任何挂起的对象引用已经释放,以防止该进程持续保持超过所需时间的对象。

getCallingPid

Added in API level 1
int getCallingPid ()

返回发送给您当前正在处理的事务的进程的ID。 此pid可与更高级别的系统服务一起使用,以确定其身份并检查权限。 如果当前线程当前未执行传入事务,则返回其自己的PID。

Returns
int

getCallingUid

Added in API level 1
int getCallingUid ()

返回分配给向您发送当前正在处理的事务的进程的Linux uid。 此uid可与更高级别的系统服务一起使用,以确定其身份并检查权限。 如果当前线程当前未执行传入事务,则返回其自己的uid。

Returns
int

getCallingUserHandle

Added in API level 17
UserHandle getCallingUserHandle ()

返回分配给发送给当前正在处理的事务的进程的UserHandle。 这是调用者的用户。 getCallingUid()不同的是,一个特定的用户将拥有多个不同的应用程序,每个应用程序都有自己的uid。 如果当前线程当前未执行传入事务,则返回其自己的UserHandle。

Returns
UserHandle

getInterfaceDescriptor

Added in API level 1
String getInterfaceDescriptor ()

默认实现返回一个空的接口名称。

Returns
String

isBinderAlive

Added in API level 1
boolean isBinderAlive ()

检查绑定器所在的进程是否仍然存在。 请注意,如果您正在调用本地联编程序,则这总是返回true,因为如果您调用它,则您的进程仍处于活动状态。

Returns
boolean false if the process is not alive. Note that if it returns true, the process may have died while the call is returning.

joinThreadPool

Added in API level 1
void joinThreadPool ()

将调用线程添加到IPC线程池。 直到当前进程退出,此函数才会返回。

linkToDeath

Added in API level 1
void linkToDeath (IBinder.DeathRecipient recipient, 
                int flags)

本地实施是无操作的。

Parameters
recipient IBinder.DeathRecipient
flags int

pingBinder

Added in API level 1
boolean pingBinder ()

默认实现总是返回true - 如果你在这里,对象是活着的。

Returns
boolean Returns false if the hosting process is gone, otherwise the result (always by default true) returned by the pingBinder() implementation on the other side.

queryLocalInterface

Added in API level 1
IInterface queryLocalInterface (String descriptor)

使用提供给attachInterface()的信息返回关联的IInterface,如果它匹配请求的描述符。

Parameters
descriptor String
Returns
IInterface

restoreCallingIdentity

Added in API level 1
void restoreCallingIdentity (long token)

将当前线程 clearCallingIdentity()入IPC的标识恢复为以前由 clearCallingIdentity()返回的 clearCallingIdentity()

Parameters
token long: The opaque token that was previously returned by clearCallingIdentity().

也可以看看:

transact

Added in API level 1
boolean transact (int code, 
                Parcel data, 
                Parcel reply, 
                int flags)

默认实现倒回地块并调用onTransact。 在远端,将呼叫处理到活页夹中以执行IPC。

Parameters
code int: The action to perform. This should be a number between FIRST_CALL_TRANSACTION and LAST_CALL_TRANSACTION.
data Parcel: Marshalled data to send to the target. Must not be null. If you are not sending any data, you must create an empty Parcel that is given here.
reply Parcel: Marshalled data to be received from the target. May be null if you are not interested in the return value.
flags int: Additional operation flags. Either 0 for a normal RPC, or FLAG_ONEWAY for a one-way RPC.
Returns
boolean
Throws
RemoteException

unlinkToDeath

Added in API level 1
boolean unlinkToDeath (IBinder.DeathRecipient recipient, 
                int flags)

本地实施是无操作的。

Parameters
recipient IBinder.DeathRecipient
flags int
Returns
boolean true if the recipient is successfully unlinked, assuring you that its DeathRecipient.binderDied() method will not be called; false if the target IBinder has already died, meaning the method has been (or soon will be) called.

Protected methods

dump

Added in API level 1
void dump (FileDescriptor fd, 
                PrintWriter fout, 
                String[] args)

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

Parameters
fd FileDescriptor: The raw file descriptor that the dump is being sent to.
fout PrintWriter: The file to which you should dump your state. This will be closed for you after you return.
args String: additional arguments to the dump request.

finalize

Added in API level 1
void finalize ()

当垃圾收集确定没有更多对该对象的引用时,由对象上的垃圾回收器调用。 子类会覆盖finalize方法以处置系统资源或执行其他清理。

的常规协定finalize是,它被调用,如果当在Java TM虚拟机已确定不再有由该目的可以通过还没有死亡,除了作为一个动作的结果的任何线程访问的任何手段取决于某些其他可以完成的对象或类别的最终定稿。 finalize方法可以采取任何行动,包括使该对象再次可用于其他线程; 然而, finalize的通常目的是在对象被不可撤销地丢弃之前执行清理操作。 例如,表示输入/输出连接的对象的finalize方法可能会执行显式I / O事务,以在永久丢弃该对象之前中断连接。

Objectfinalize方法Object执行特殊操作; 它只是正常返回。 Object子类可能会覆盖此定义。

Java编程语言不保证哪个线程将为任何给定对象调用finalize方法。 但是,保证调用finalize的线程在调用finalize时不会保留任何用户可见的同步锁。 如果finalize方法引发未捕获的异常,则忽略该异常,并终止该对象的终止。

在为一个对象调用了 finalize方法之后,在Java虚拟机再次确定不再有任何方式可以通过任何尚未死亡的线程访问此对象,包括可能的操作通过准备完成的其他对象或类别,此时该对象可能被丢弃。

对于任何给定对象,Java虚拟机永远不会多次调用 finalize方法。

finalize方法抛出的任何异常 finalize导致此对象的终止被暂停,但在其他情况下会被忽略。

Throws
Throwable

onTransact

Added in API level 1
boolean onTransact (int code, 
                Parcel data, 
                Parcel reply, 
                int flags)

默认实现是一个返回false的存根。 您需要重写此操作以执行相应的事务解组。

如果你想调用这个,请调用transact()。

Parameters
code int
data Parcel
reply Parcel
flags int
Returns
boolean
Throws
RemoteException

Hooray!