java.lang.Object | |
↳ | android.os.Binder |
Base class for a remotable object, the core part of a lightweight
remote procedure call mechanism defined by IBinder
.
This class is an implementation of IBinder that provides
the standard support creating a local implementation of such an object.
Most developers will not implement this class directly, instead using the aidl tool to describe the desired interface, having it generate the appropriate Binder subclass. You can, however, derive directly from Binder to implement your own custom RPC protocol or simply instantiate a raw Binder object directly to use as a token that can be shared across processes.
[Expand]
Inherited Constants | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
From interface
android.os.IBinder
|
Public Constructors | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Default constructor initializes the object.
|
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Convenience method for associating a specific interface with the Binder.
| |||||||||||
Reset the identity of the incoming IPC on the current thread.
| |||||||||||
Implemented to call the more convenient version
dump(FileDescriptor, PrintWriter, String[]) . | |||||||||||
Like
dump(FileDescriptor, String[]) , but ensures the target
executes asynchronously. | |||||||||||
Flush any Binder commands pending in the current thread to the kernel
driver.
| |||||||||||
Return the ID of the process that sent you the current transaction
that is being processed.
| |||||||||||
Return the Linux uid assigned to the process that sent you the
current transaction that is being processed.
| |||||||||||
Return the UserHandle assigned to the process that sent you the
current transaction that is being processed.
| |||||||||||
Default implementation returns an empty interface name.
| |||||||||||
Check to see if the process that the binder is in is still alive.
Note that if you're calling on a local binder, this always returns true
because your process is alive if you're calling it.
| |||||||||||
Add the calling thread to the IPC thread pool.
| |||||||||||
Local implementation is a no-op.
| |||||||||||
Default implementation always returns true -- if you got here,
the object is alive.
| |||||||||||
Use information supplied to attachInterface() to return the
associated IInterface if it matches the requested
descriptor.
| |||||||||||
Restore the identity of the incoming IPC on the current thread
back to a previously identity that was returned by
clearCallingIdentity() . | |||||||||||
Default implementation rewinds the parcels and calls onTransact.
| |||||||||||
Local implementation is a no-op.
|
Protected Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Print the object's state into the given stream.
| |||||||||||
Invoked when the garbage collector has detected that this instance is no longer reachable.
| |||||||||||
Default implementation is a stub that returns false.
|
[Expand]
Inherited Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
From class
java.lang.Object
| |||||||||||
From interface
android.os.IBinder
|
Convenience method for associating a specific interface with the Binder. After calling, queryLocalInterface() will be implemented for you to return the given owner IInterface when the corresponding descriptor is requested.
Reset the identity of the incoming IPC on the current thread. This can be useful if, while handling an incoming call, you will be calling on interfaces of other objects that may be local to your process and need to do permission checks on the calls coming into them (so they will check the permission of your own local process, and not whatever process originally called you).
restoreCallingIdentity(long)
.Implemented to call the more convenient version
dump(FileDescriptor, PrintWriter, String[])
.
fd | The raw file descriptor that the dump is being sent to. |
---|---|
args | additional arguments to the dump request. |
Like dump(FileDescriptor, String[])
, but ensures the target
executes asynchronously.
fd | The raw file descriptor that the dump is being sent to. |
---|---|
args | additional arguments to the dump request. |
Flush any Binder commands pending in the current thread to the kernel driver. This can be useful to call before performing an operation that may block for a long time, to ensure that any pending object references have been released in order to prevent the process from holding on to objects longer than it needs to.
Return the ID of the process that sent you the current transaction that is being processed. This pid can be used with higher-level system services to determine its identity and check permissions. If the current thread is not currently executing an incoming transaction, then its own pid is returned.
Return the Linux uid assigned to the process that sent you the current transaction that is being processed. This uid can be used with higher-level system services to determine its identity and check permissions. If the current thread is not currently executing an incoming transaction, then its own uid is returned.
Return the UserHandle assigned to the process that sent you the
current transaction that is being processed. This is the user
of the caller. It is distinct from getCallingUid()
in that a
particular user will have multiple distinct apps running under it each
with their own uid. If the current thread is not currently executing an
incoming transaction, then its own UserHandle is returned.
Default implementation returns an empty interface name.
Check to see if the process that the binder is in is still alive. Note that if you're calling on a local binder, this always returns true because your process is alive if you're calling it.
Add the calling thread to the IPC thread pool. This function does not return until the current process is exiting.
Local implementation is a no-op.
Default implementation always returns true -- if you got here, the object is alive.
Use information supplied to attachInterface() to return the associated IInterface if it matches the requested descriptor.
Restore the identity of the incoming IPC on the current thread
back to a previously identity that was returned by clearCallingIdentity()
.
token | The opaque token that was previously returned by
clearCallingIdentity() . |
---|
Default implementation rewinds the parcels and calls onTransact. On the remote side, transact calls into the binder to do the IPC.
code | The action to perform. This should
be a number between FIRST_CALL_TRANSACTION and
LAST_CALL_TRANSACTION . |
---|---|
data | 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 | Marshalled data to be received from the target. May be null if you are not interested in the return value. |
flags | Additional operation flags. Either 0 for a normal
RPC, or FLAG_ONEWAY for a one-way RPC.
|
RemoteException |
---|
Local implementation is a no-op.
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.Print the object's state into the given stream.
fd | The raw file descriptor that the dump is being sent to. |
---|---|
fout | The file to which you should dump your state. This will be closed for you after you return. |
args | additional arguments to the dump request. |
Invoked when the garbage collector has detected that this instance is no longer reachable. The default implementation does nothing, but this method can be overridden to free resources.
Note that objects that override finalize
are significantly more expensive than
objects that don't. Finalizers may be run a long time after the object is no longer
reachable, depending on memory pressure, so it's a bad idea to rely on them for cleanup.
Note also that finalizers are run on a single VM-wide finalizer thread,
so doing blocking work in a finalizer is a bad idea. A finalizer is usually only necessary
for a class that has a native peer and needs to call a native method to destroy that peer.
Even then, it's better to provide an explicit close
method (and implement
Closeable
), and insist that callers manually dispose of instances. This
works well for something like files, but less well for something like a BigInteger
where typical calling code would have to deal with lots of temporaries. Unfortunately,
code that creates lots of temporaries is the worst kind of code from the point of view of
the single finalizer thread.
If you must use finalizers, consider at least providing your own
ReferenceQueue
and having your own thread process that queue.
Unlike constructors, finalizers are not automatically chained. You are responsible for
calling super.finalize()
yourself.
Uncaught exceptions thrown by finalizers are ignored and do not terminate the finalizer thread. See Effective Java Item 7, "Avoid finalizers" for more.
Throwable |
---|
Default implementation is a stub that returns false. You will want to override this to do the appropriate unmarshalling of transactions.
If you want to call this, call transact().
RemoteException |
---|