Condividi tramite


IBinder Interfaccia

Definizione

Interfaccia di base per un oggetto remotabile, la parte principale di un meccanismo di chiamata di routine remota leggero progettato per prestazioni elevate durante l'esecuzione di chiamate in-process e tra processi.

[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
Derivato
Attributi
Implementazioni

Commenti

Interfaccia di base per un oggetto remotabile, la parte principale di un meccanismo di chiamata di routine remota leggero progettato per prestazioni elevate durante l'esecuzione di chiamate in-process e tra processi. Questa interfaccia descrive il protocollo astratto per interagire con un oggetto remotabile. Non implementare direttamente questa interfaccia, ma estenderlo da Binder.

L'API IBinder chiave corrisponde #transact transact() a Binder#onTransact Binder.onTransact(). Questi metodi consentono di inviare una chiamata a un oggetto IBinder e ricevere una chiamata in arrivo rispettivamente a un oggetto Binder. Questa API di transazione è sincrona, in modo che una chiamata a #transact transact() non restituisca finché la destinazione non viene restituita da Binder#onTransact Binder.onTransact(). Questo è il comportamento previsto quando si chiama un oggetto presente nel processo locale e il meccanismo IPC (Inter-Process Communication) sottostante garantisce che queste stesse semantiche vengano applicate durante l'esecuzione di processi.

I dati inviati tramite transact() sono , Parcelun buffer generico di dati che gestisce anche alcuni metadati relativi al relativo contenuto. I metadati vengono usati per gestire i riferimenti agli oggetti IBinder nel buffer, in modo che tali riferimenti possano essere mantenuti man mano che il buffer si sposta tra i processi. Questo meccanismo garantisce che quando un IBinder viene scritto in un pacco e inviato a un altro processo, se l'altro processo invia un riferimento allo stesso IBinder al processo originale, il processo originale riceverà nuovamente lo stesso oggetto IBinder. Queste semantiche consentono l'uso di oggetti IBinder/Binder come identità univoca (da usare come token o per altri scopi) che possono essere gestiti tra processi.

Il sistema gestisce un pool di thread di transazioni in ogni processo in cui viene eseguito. Questi thread vengono usati per inviare tutti gli IPC provenienti da altri processi. Ad esempio, quando un IPC viene creato dal processo A al processo B, il thread chiamante in blocchi A in transact() man mano che invia la transazione al processo B. Il thread del pool disponibile successivo in B riceve la transazione in ingresso, chiama Binder.onTransact() nell'oggetto di destinazione e risponde con il risultato Parcel. Al momento della ricezione del risultato, il thread nel processo A torna per consentire la continuazione dell'esecuzione. In effetti, altri processi sembrano essere usati come thread aggiuntivi che non sono stati creati in esecuzione nel proprio processo.

Il sistema Binder supporta anche la ricorsione tra i processi. Ad esempio, se il processo A esegue una transazione per elaborare B ed elabora B durante la gestione di tale transazione chiama transact() su un IBinder implementato in A, il thread in A che è attualmente in attesa del completamento della transazione originale si occuperà della chiamata di Binder.onTransact() sull'oggetto chiamato da B. In questo modo si garantisce che la semantica di ricorsione quando si chiama l'oggetto binder remoto sia uguale a quando si chiamano oggetti locali.

Quando si usano oggetti remoti, spesso si vuole scoprire quando non sono più validi. È possibile determinare in tre modi: <ul<>li> Il #transact transact() metodo genererà un'eccezione RemoteException se si tenta di chiamarla in un IBinder il cui processo non esiste più. <li> Il #pingBinder() metodo può essere chiamato e restituirà false se il processo remoto non esiste più. <li> Il #linkToDeath linkToDeath() metodo può essere usato per registrare un DeathRecipient oggetto con IBinder, che verrà chiamato quando il processo contenitore viene eliminato. </ul>

Documentazione java per android.os.IBinder.

Le parti di questa pagina sono modifiche basate sul lavoro creato e condiviso dal progetto Open Source Android e usato in base ai termini descritti nella licenza Creative Commons 2.5 Attribuzione.

Campi

DumpTransaction

Codice della transazione del protocollo IBinder: stato interno del dump.

FirstCallTransaction

Primo codice di transazione disponibile per i comandi utente.

InterfaceTransaction

Codice di transazione del protocollo IBinder: interrogare il lato destinatario della transazione per il descrittore di interfaccia canonico.

LastCallTransaction

Ultimo codice di transazione disponibile per i comandi utente.

LikeTransaction

Codice di transazione del protocollo IBinder: indicare a un'app in modo asincrono che il chiamante lo piace.

PingTransaction

Codice transazione del protocollo IBinder: pingBinder().

TweetTransaction

Codice di transazione del protocollo IBinder: inviare un tweet all'oggetto di destinazione.

Proprietà

Handle

Ottiene il valore JNI dell'oggetto Android sottostante.

(Ereditato da IJavaObject)
InterfaceDescriptor

Ottenere il nome canonico dell'interfaccia supportata da questo binder.

IsBinderAlive

Verificare se il processo in cui si trova il binder è ancora attivo.

JniIdentityHashCode

Restituisce il valore di java.lang.System.identityHashCode() per l'istanza di cui è stato eseguito il wrapping.

(Ereditato da IJavaPeerable)
JniManagedPeerState

Stato del peer gestito.

(Ereditato da IJavaPeerable)
JniPeerMembers

Supporto per l'accesso ai membri e la chiamata.

(Ereditato da IJavaPeerable)
PeerReference

Restituisce un JniObjectReference oggetto dell'istanza dell'oggetto Java di cui è stato eseguito il wrapping.

(Ereditato da IJavaPeerable)
SuggestedMaxIpcSizeBytes

Limite che deve essere inserito nelle dimensioni IPC, in byte, per mantenerle al di sotto del limite del buffer delle transazioni.

Metodi

Disposed()

Chiamato quando l'istanza è stata eliminata.

(Ereditato da IJavaPeerable)
DisposeUnlessReferenced()

Se non sono presenti riferimenti in sospeso a questa istanza, chiama Dispose(); in caso contrario, non esegue alcuna operazione.

(Ereditato da IJavaPeerable)
Dump(FileDescriptor, String[])

Stampare lo stato dell'oggetto nel flusso specificato.

DumpAsync(FileDescriptor, String[])

Come #dump(FileDescriptor, String[]) ma sempre viene eseguito in modo asincrono.

Finalized()

Chiamato quando l'istanza è stata finalizzata.

(Ereditato da IJavaPeerable)
LinkToDeath(IBinderDeathRecipient, Int32)

Registrare il destinatario per una notifica se questo binder viene eliminato.

PingBinder()

Verificare se l'oggetto esiste ancora.

QueryLocalInterface(String)

Tentare di recuperare un'implementazione locale di un'interfaccia per questo oggetto Binder.

SetJniIdentityHashCode(Int32)

Impostare il valore restituito da JniIdentityHashCode.

(Ereditato da IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

Interfaccia di base per un oggetto remotabile, la parte principale di un meccanismo di chiamata di routine remota leggero progettato per prestazioni elevate durante l'esecuzione di chiamate in-process e tra processi.

(Ereditato da IJavaPeerable)
SetPeerReference(JniObjectReference)

Impostare il valore restituito da PeerReference.

(Ereditato da IJavaPeerable)
Transact(Int32, Parcel, Parcel, TransactionFlags)

Eseguire un'operazione generica con l'oggetto .

UnlinkToDeath(IBinderDeathRecipient, Int32)

Rimuovere una notifica di morte registrata in precedenza.

UnregisterFromRuntime()

Annullare la registrazione di questa istanza in modo che il runtime non lo restituisca dalle chiamate future Java.Interop.JniRuntime+JniValueManager.PeekValue .

(Ereditato da IJavaPeerable)

Metodi di estensione

JavaCast<TResult>(IJavaObject)

Esegue una conversione del tipo di tipo controllato dal runtime Android.

JavaCast<TResult>(IJavaObject)

Interfaccia di base per un oggetto remotabile, la parte principale di un meccanismo di chiamata di routine remota leggero progettato per prestazioni elevate durante l'esecuzione di chiamate in-process e tra processi.

GetJniTypeName(IJavaPeerable)

Interfaccia di base per un oggetto remotabile, la parte principale di un meccanismo di chiamata di routine remota leggero progettato per prestazioni elevate durante l'esecuzione di chiamate in-process e tra processi.

Si applica a