Compartir a través de


IBinder Interfaz

Definición

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 Parcelbú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 java.lang.System.identityHashCode() para la instancia ajustada.

(Heredado de IJavaPeerable)
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 Dispose(); de lo contrario, no hace nada.

(Heredado de IJavaPeerable)
Dump(FileDescriptor, String[])

Imprima el estado del objeto en la secuencia especificada.

DumpAsync(FileDescriptor, String[])

Como #dump(FileDescriptor, String[]) pero siempre se ejecuta de forma asincrónica.

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 JniIdentityHashCode.

(Heredado de IJavaPeerable)
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 PeerReference.

(Heredado de IJavaPeerable)
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.

Se aplica a