public class Binder
extends Object
implements IBinder
java.lang.Object | |
↳ | android.os.Binder |
可远程对象的基类,由IBinder
定义的轻量级远程过程调用机制的核心部分。 这个类是IBinder的一个实现,它提供了这种对象的标准本地实现。
大多数开发人员不会直接实现此类,而是使用aidl工具来描述所需的接口,让它生成适当的Binder子类。 但是,您可以直接从Binder派生实现您自己的自定义RPC协议,或直接实例化原始Binder对象以用作可跨进程共享的令牌。
这个类只是一个基本的IPC原语; 它对应用程序的生命周期没有影响,只有在创建它的过程继续运行时才有效。 要正确使用此功能,您必须在顶层应用程序组件(一个上下文中这样做Service
, Activity
,或ContentProvider
),让系统知道你的过程中应保持运行。
您必须记住流程可能会消失的情况,因此需要稍后重新创建新的活页夹并在流程重新启动时重新附加它。 例如,如果您在Activity
内使用此Activity
,则在活动未开始时您的活动进程可能会被Activity
; 如果稍后重新创建活动,则需要创建一个新的活页夹并将其重新发回到正确的位置; 您需要意识到您的流程可能因其他原因(例如接收广播)而被启动,这将不涉及重新创建活动并因此运行其代码以创建新的活页夹。
也可以看看:
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) 实施调用更方便的版本 |
void |
dumpAsync(FileDescriptor fd, String[] args) 像 |
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的标识恢复为以前由 |
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
|
void attachInterface (IInterface owner, String descriptor)
将特定界面与活页夹相关联的便捷方法。 调用后,queryLocalInterface()将被实现,以便在请求相应的描述符时返回给定的所有者IInterface。
Parameters | |
---|---|
owner |
IInterface
|
descriptor |
String
|
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) . |
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. |
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. |
void flushPendingCommands ()
将当前线程中挂起的所有Binder命令刷新到内核驱动程序。 在执行可能会阻塞很长时间的操作之前调用这个函数可能很有用,以确保任何挂起的对象引用已经释放,以防止该进程持续保持超过所需时间的对象。
int getCallingPid ()
返回发送给您当前正在处理的事务的进程的ID。 此pid可与更高级别的系统服务一起使用,以确定其身份并检查权限。 如果当前线程当前未执行传入事务,则返回其自己的PID。
Returns | |
---|---|
int |
int getCallingUid ()
返回分配给向您发送当前正在处理的事务的进程的Linux uid。 此uid可与更高级别的系统服务一起使用,以确定其身份并检查权限。 如果当前线程当前未执行传入事务,则返回其自己的uid。
Returns | |
---|---|
int |
UserHandle getCallingUserHandle ()
返回分配给发送给当前正在处理的事务的进程的UserHandle。 这是调用者的用户。 与getCallingUid()
不同的是,一个特定的用户将拥有多个不同的应用程序,每个应用程序都有自己的uid。 如果当前线程当前未执行传入事务,则返回其自己的UserHandle。
Returns | |
---|---|
UserHandle |
String getInterfaceDescriptor ()
默认实现返回一个空的接口名称。
Returns | |
---|---|
String |
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. |
void linkToDeath (IBinder.DeathRecipient recipient, int flags)
本地实施是无操作的。
Parameters | |
---|---|
recipient |
IBinder.DeathRecipient
|
flags |
int
|
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. |
IInterface queryLocalInterface (String descriptor)
使用提供给attachInterface()的信息返回关联的IInterface,如果它匹配请求的描述符。
Parameters | |
---|---|
descriptor |
String
|
Returns | |
---|---|
IInterface |
void restoreCallingIdentity (long token)
将当前线程 clearCallingIdentity()
入IPC的标识恢复为以前由 clearCallingIdentity()
返回的 clearCallingIdentity()
。
Parameters | |
---|---|
token |
long : The opaque token that was previously returned by clearCallingIdentity() . |
也可以看看:
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 |
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. |
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. |
void finalize ()
当垃圾收集确定没有更多对该对象的引用时,由对象上的垃圾回收器调用。 子类会覆盖finalize
方法以处置系统资源或执行其他清理。
的常规协定finalize
是,它被调用,如果当在Java TM虚拟机已确定不再有由该目的可以通过还没有死亡,除了作为一个动作的结果的任何线程访问的任何手段取决于某些其他可以完成的对象或类别的最终定稿。 finalize
方法可以采取任何行动,包括使该对象再次可用于其他线程; 然而, finalize
的通常目的是在对象被不可撤销地丢弃之前执行清理操作。 例如,表示输入/输出连接的对象的finalize方法可能会执行显式I / O事务,以在永久丢弃该对象之前中断连接。
类Object
的finalize
方法Object
执行特殊操作; 它只是正常返回。 Object
子类可能会覆盖此定义。
Java编程语言不保证哪个线程将为任何给定对象调用finalize
方法。 但是,保证调用finalize的线程在调用finalize时不会保留任何用户可见的同步锁。 如果finalize方法引发未捕获的异常,则忽略该异常,并终止该对象的终止。
在为一个对象调用了 finalize
方法之后,在Java虚拟机再次确定不再有任何方式可以通过任何尚未死亡的线程访问此对象,包括可能的操作通过准备完成的其他对象或类别,此时该对象可能被丢弃。
对于任何给定对象,Java虚拟机永远不会多次调用 finalize
方法。
finalize
方法抛出的任何异常 finalize
导致此对象的终止被暂停,但在其他情况下会被忽略。
Throws | |
---|---|
Throwable |
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 |