IBinder Interfaz
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Interfaz base para un objeto remoto, la parte principal de un mecanismo ligero de llamada a procedimiento remoto diseñado para un alto rendimiento al realizar llamadas en proceso y entre procesos.
[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
- Derivado
- Atributos
- Implementaciones
Comentarios
Interfaz base para un objeto remoto, la parte principal de un mecanismo ligero de llamada a procedimiento remoto diseñado para un alto rendimiento al realizar llamadas en proceso y entre procesos. En esta interfaz se describe el protocolo abstracto para interactuar con un objeto remoto. No implemente esta interfaz directamente, sino que extienda desde Binder
.
La API de IBinder clave coincide #transact transact()
con Binder#onTransact Binder.onTransact()
. Estos métodos permiten enviar una llamada a un objeto IBinder y recibir una llamada que llega a un objeto Binder, respectivamente. Esta API de transacción es sincrónica, de modo que una llamada a #transact transact()
no devuelve hasta que el destino ha devuelto desde Binder#onTransact Binder.onTransact()
; este es el comportamiento esperado al llamar a un objeto que existe en el proceso local y el mecanismo subyacente de comunicación entre procesos (IPC) garantiza que se apliquen estas mismas semánticas al pasar por procesos.
Los datos enviados a través de transact() son , un Parcel
búfer genérico de datos que también mantiene algunos metadatos sobre su contenido. Los metadatos se usan para administrar las referencias de objetos IBinder en el búfer, de modo que esas referencias se puedan mantener a medida que el búfer se mueve a través de los procesos. Este mecanismo garantiza que cuando un IBinder se escribe en un paquete y se envía a otro proceso, si ese otro proceso envía una referencia a ese mismo IBinder de vuelta al proceso original, el proceso original recibirá el mismo objeto IBinder de vuelta. Esta semántica permite que los objetos IBinder/Binder se usen como una identidad única (para servir como token o para otros fines) que se pueden administrar entre procesos.
El sistema mantiene un grupo de subprocesos de transacción en cada proceso en el que se ejecuta. Estos subprocesos se usan para enviar todas las IPC procedentes de otros procesos. Por ejemplo, cuando se realiza un IPC desde el proceso A para procesar B, el subproceso que realiza la llamada en bloques A en transact() a medida que envía la transacción para procesar B. El siguiente subproceso de grupo disponible en B recibe la transacción entrante, llama a Binder.onTransact() en el objeto de destino y responde con el resultado Parcel. Tras recibir su resultado, el subproceso en el proceso A devuelve para permitir que su ejecución continúe. En efecto, otros procesos parecen usarse como subprocesos adicionales que no creó en ejecución en su propio proceso.
El sistema Binder también admite la recursividad entre procesos. Por ejemplo, si el proceso A realiza una transacción para procesar B y procesar B mientras controla esa transacción llama a transact() en un IBinder que se implementa en A, el subproceso de A que está esperando a que finalice la transacción original se encargará de llamar a Binder.onTransact() en el objeto al que llama B. Esto garantiza que la semántica de recursividad al llamar al objeto enlazador remoto sea la misma que al llamar a objetos locales.
Al trabajar con objetos remotos, a menudo quiere averiguar cuándo ya no son válidos. Hay tres maneras de determinar esto: <ul><li> El #transact transact()
método producirá una RemoteException
excepción si intenta llamarlo en un IBinder cuyo proceso ya no existe. <li> Se #pingBinder()
puede llamar al método y devolverá false si el proceso remoto ya no existe. <li> El #linkToDeath linkToDeath()
método se puede usar para registrar un DeathRecipient
elemento con el IBinder, al que se llamará cuando desaparezca su proceso contenedor. </ul>
Documentación de Java para android.os.IBinder
.
Las partes de esta página son modificaciones basadas en el trabajo creado y compartido por el proyecto de código abierto de Android y se usan según los términos descritos en la licencia de atribución de Creative Commons 2.5.
Campos
DumpTransaction |
Código de transacción del protocolo IBinder: volcado de estado interno. |
FirstCallTransaction |
El primer código de transacción disponible para los comandos de usuario. |
InterfaceTransaction |
Código de transacción del protocolo IBinder: interroga el lado del destinatario de la transacción para su descriptor de interfaz canónica. |
LastCallTransaction |
El último código de transacción disponible para los comandos de usuario. |
LikeTransaction |
Código de transacción del protocolo IBinder: indique a una aplicación de forma asincrónica que el autor de la llamada le gusta. |
PingTransaction |
Código de transacción del protocolo IBinder: pingBinder(). |
TweetTransaction |
Código de transacción del protocolo IBinder: envíe un tweet al objeto de destino. |
Propiedades
Handle |
Obtiene el valor JNI del objeto Android subyacente. (Heredado de IJavaObject) |
InterfaceDescriptor |
Obtenga el nombre canónico de la interfaz compatible con este enlazador. |
IsBinderAlive |
Compruebe si el proceso en el que el enlazador está activo. |
JniIdentityHashCode |
Devuelve el valor de |
JniManagedPeerState |
Estado del mismo nivel administrado. (Heredado de IJavaPeerable) |
JniPeerMembers |
Compatibilidad con la invocación y el acceso de miembros. (Heredado de IJavaPeerable) |
PeerReference |
Devuelve una JniObjectReference de la instancia de objeto Java ajustada. (Heredado de IJavaPeerable) |
SuggestedMaxIpcSizeBytes |
Límite que se debe colocar en tamaños IPC, en bytes, para mantenerlos de forma segura bajo el límite del búfer de transacciones. |
Métodos
Disposed() |
Se llama cuando se ha eliminado la instancia. (Heredado de IJavaPeerable) |
DisposeUnlessReferenced() |
Si no hay referencias pendientes a esta instancia, llama a |
Dump(FileDescriptor, String[]) |
Imprima el estado del objeto en la secuencia especificada. |
DumpAsync(FileDescriptor, String[]) |
Como |
Finalized() |
Se llama cuando se ha finalizado la instancia. (Heredado de IJavaPeerable) |
LinkToDeath(IBinderDeathRecipient, Int32) |
Registre el destinatario para obtener una notificación si este enlazador desaparece. |
PingBinder() |
Compruebe si el objeto sigue existiendo. |
QueryLocalInterface(String) |
Intente recuperar una implementación local de una interfaz para este objeto Binder. |
SetJniIdentityHashCode(Int32) |
Establezca el valor devuelto por |
SetJniManagedPeerState(JniManagedPeerStates) |
Interfaz base para un objeto remoto, la parte principal de un mecanismo ligero de llamada a procedimiento remoto diseñado para un alto rendimiento al realizar llamadas en proceso y entre procesos. (Heredado de IJavaPeerable) |
SetPeerReference(JniObjectReference) |
Establezca el valor devuelto por |
Transact(Int32, Parcel, Parcel, TransactionFlags) |
Realice una operación genérica con el objeto . |
UnlinkToDeath(IBinderDeathRecipient, Int32) |
Quite una notificación de muerte registrada anteriormente. |
UnregisterFromRuntime() |
Anule el registro de esta instancia para que el entorno de ejecución no lo devuelva de invocaciones futuras Java.Interop.JniRuntime+JniValueManager.PeekValue . (Heredado de IJavaPeerable) |
Métodos de extensión
JavaCast<TResult>(IJavaObject) |
Realiza una conversión de tipos comprobados en tiempo de ejecución de Android. |
JavaCast<TResult>(IJavaObject) |
Interfaz base para un objeto remoto, la parte principal de un mecanismo ligero de llamada a procedimiento remoto diseñado para un alto rendimiento al realizar llamadas en proceso y entre procesos. |
GetJniTypeName(IJavaPeerable) |
Interfaz base para un objeto remoto, la parte principal de un mecanismo ligero de llamada a procedimiento remoto diseñado para un alto rendimiento al realizar llamadas en proceso y entre procesos. |