IBinder Interfaccia
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
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 , Parcel
un 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 |
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 |
Dump(FileDescriptor, String[]) |
Stampare lo stato dell'oggetto nel flusso specificato. |
DumpAsync(FileDescriptor, String[]) |
Come |
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 |
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 |
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. |