Freigeben über


IBinder Schnittstelle

Definition

Basisschnittstelle für ein remotable-Objekt, der Kernteil eines einfachen Remoteprozeduraufrufmechanismus, der für eine hohe Leistung bei in-Process- und prozessübergreifenden Aufrufen entwickelt wurde.

[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
Abgeleitet
Attribute
Implementiert

Hinweise

Basisschnittstelle für ein remotable-Objekt, der Kernteil eines einfachen Remoteprozeduraufrufmechanismus, der für eine hohe Leistung bei in-Process- und prozessübergreifenden Aufrufen entwickelt wurde. Diese Schnittstelle beschreibt das abstrakte Protokoll für die Interaktion mit einem remotable-Objekt. Implementieren Sie diese Schnittstelle nicht direkt, sondern erweitern Sie von Binder.

Die Schlüssel-IBinder-API wird #transact transact() von Binder#onTransact Binder.onTransact(). Mit diesen Methoden können Sie einen Aufruf an ein IBinder-Objekt senden und einen Aufruf empfangen, der in ein Binder-Objekt eingeht. Diese Transaktions-API ist synchron, sodass ein Aufruf nicht #transact transact() zurückgegeben wird, bis das Ziel zurückgegeben Binder#onTransact Binder.onTransact()wurde. Dies ist das erwartete Verhalten beim Aufrufen eines Objekts, das im lokalen Prozess vorhanden ist, und der zugrunde liegende Interprozesskommunikationsmechanismus (INTER-Process Communication, IPC) stellt sicher, dass diese gleiche Semantik beim Durchlaufen von Prozessen angewendet wird.

Die über Transact() gesendeten Daten sind ein Parcelgenerischer Datenpuffer, der auch Metadaten zu seinen Inhalten verwaltet. Die Metadaten werden verwendet, um IBinder-Objektverweise im Puffer zu verwalten, sodass diese Verweise beibehalten werden können, wenn der Puffer über Prozesse hinweg verschoben wird. Dieser Mechanismus stellt sicher, dass, wenn ein IBinder in ein Paket geschrieben und an einen anderen Prozess gesendet wird, wenn dieser andere Prozess einen Verweis auf dasselbe IBinder zurück an den ursprünglichen Prozess sendet, dann erhält der ursprüngliche Prozess dasselbe IBinder-Objekt zurück. Diese Semantik ermöglicht die Verwendung von IBinder/Binder-Objekten als eindeutige Identität (als Token oder für andere Zwecke), die über Prozesse hinweg verwaltet werden können.

Das System verwaltet einen Pool von Transaktionsthreads in jedem Prozess, in dem er ausgeführt wird. Diese Threads werden verwendet, um alle IPCs zu verteilen, die von anderen Prozessen stammen. Wenn z. B. ein IPC von Prozess A zu Prozess B hergestellt wird, sendet der aufrufende Thread in A-Blöcken in Transact() die Transaktion an den Prozess B. Der nächste verfügbare Poolthread in B empfängt die eingehende Transaktion, ruft Binder.onTransact() für das Zielobjekt und antwortet mit dem ErgebnisPaket. Nach Erhalt des Ergebnisses gibt der Thread in Prozess A zurück, damit seine Ausführung fortgesetzt werden kann. Tatsächlich scheinen andere Prozesse als zusätzliche Threads zu verwenden, die Sie nicht in Ihrem eigenen Prozess erstellt haben.

Das Binder-System unterstützt auch Rekursion über Prozesse hinweg. Wenn z. B. prozess A eine Transaktion zum Verarbeiten von B ausführt und B während der Verarbeitung dieser Transaktion Transact() für ein in A implementiertes IBinder aufruft, übernimmt der Thread in A, der derzeit auf den Abschluss der ursprünglichen Transaktion wartet, den Aufruf von Binder.onTransact() für das von B aufgerufene Objekt. Dadurch wird sichergestellt, dass die Rekursionssemantik beim Aufrufen des Remotebinderobjekts mit dem Aufrufen lokaler Objekte identisch ist.

Beim Arbeiten mit Remoteobjekten möchten Sie häufig herausfinden, wann sie nicht mehr gültig sind. Es gibt drei Möglichkeiten, dies zu bestimmen: <ul><li> Die #transact transact() Methode löst eine RemoteException Ausnahme aus, wenn Sie versuchen, sie für einen IBinder aufzurufen, dessen Prozess nicht mehr vorhanden ist. <li> Die #pingBinder() Methode kann aufgerufen werden und gibt "false" zurück, wenn der Remoteprozess nicht mehr vorhanden ist. <li> The #linkToDeath linkToDeath() method can be used to register a DeathRecipient with the IBinder, which will be called when its containing process goes away. </ul>

Java-Dokumentation für android.os.IBinder.

Teile dieser Seite sind Änderungen auf der Grundlage von Arbeiten, die vom Android Open Source-Projekt erstellt und freigegeben werden und gemäß den in der Creative Commons 2.5 Attribution License beschriebenen Begriffen verwendet werden.

Felder

DumpTransaction

IBinder-Protokolltransaktionscode: speicherinternen Zustand.

FirstCallTransaction

Der erste Transaktionscode, der für Benutzerbefehle verfügbar ist.

InterfaceTransaction

IBinder-Protokolltransaktionscode: Fragen Sie die Empfängerseite der Transaktion nach dem kanonischen Schnittstellendeskriptor ab.

LastCallTransaction

Der letzte Transaktionscode, der für Benutzerbefehle verfügbar ist.

LikeTransaction

IBinder-Protokolltransaktionscode: Teilen Sie einer App asynchron mit, dass der Aufrufer sie gefällt.

PingTransaction

IBinder-Protokolltransaktionscode: pingBinder().

TweetTransaction

IBinder-Protokolltransaktionscode: Senden Sie einen Tweet an das Zielobjekt.

Eigenschaften

Handle

Ruft den JNI-Wert des zugrunde liegenden Android-Objekts ab.

(Geerbt von IJavaObject)
InterfaceDescriptor

Rufen Sie den kanonischen Namen der Schnittstelle ab, die von diesem Ordner unterstützt wird.

IsBinderAlive

Überprüfen Sie, ob der Prozess, in dem sich der Ordner befindet, noch aktiv ist.

JniIdentityHashCode

Gibt den Wert java.lang.System.identityHashCode() für die umbrochene Instanz zurück.

(Geerbt von IJavaPeerable)
JniManagedPeerState

Status des verwalteten Peers.

(Geerbt von IJavaPeerable)
JniPeerMembers

Mitgliedszugriff und Aufrufunterstützung.

(Geerbt von IJavaPeerable)
PeerReference

Gibt eine JniObjectReference der umbrochenen Java-Objektinstanz zurück.

(Geerbt von IJavaPeerable)
SuggestedMaxIpcSizeBytes

Grenzwert, der auf IPC-Größen in Bytes platziert werden sollte, um sie sicher unter dem Transaktionspuffergrenzwert zu halten.

Methoden

Disposed()

Wird aufgerufen, wenn die Instanz verworfen wurde.

(Geerbt von IJavaPeerable)
DisposeUnlessReferenced()

Wenn keine offenen Verweise auf diese Instanz vorhanden sind, wird nichts aufgerufen Dispose(). Andernfalls wird nichts ausgeführt.

(Geerbt von IJavaPeerable)
Dump(FileDescriptor, String[])

Drucken Sie den Zustand des Objekts in den angegebenen Datenstrom.

DumpAsync(FileDescriptor, String[])

"Gefällt #dump(FileDescriptor, String[]) mir", wird aber immer asynchron ausgeführt.

Finalized()

Wird aufgerufen, wenn die Instanz abgeschlossen wurde.

(Geerbt von IJavaPeerable)
LinkToDeath(IBinderDeathRecipient, Int32)

Registrieren Sie den Empfänger für eine Benachrichtigung, wenn dieser Ordner weggeht.

PingBinder()

Überprüfen Sie, ob das Objekt noch vorhanden ist.

QueryLocalInterface(String)

Versuchen Sie, eine lokale Implementierung einer Schnittstelle für dieses Binder-Objekt abzurufen.

SetJniIdentityHashCode(Int32)

Legen Sie den von JniIdentityHashCode.

(Geerbt von IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

Basisschnittstelle für ein remotable-Objekt, der Kernteil eines einfachen Remoteprozeduraufrufmechanismus, der für eine hohe Leistung bei in-Process- und prozessübergreifenden Aufrufen entwickelt wurde.

(Geerbt von IJavaPeerable)
SetPeerReference(JniObjectReference)

Legen Sie den von PeerReference.

(Geerbt von IJavaPeerable)
Transact(Int32, Parcel, Parcel, TransactionFlags)

Führen Sie einen generischen Vorgang mit dem Objekt aus.

UnlinkToDeath(IBinderDeathRecipient, Int32)

Entfernen Einer zuvor registrierten Todesbenachrichtigung.

UnregisterFromRuntime()

Heben Sie die Registrierung dieser Instanz auf, damit die Laufzeit sie nicht aus zukünftigen Java.Interop.JniRuntime+JniValueManager.PeekValue Aufrufen zurückgibt.

(Geerbt von IJavaPeerable)

Erweiterungsmethoden

JavaCast<TResult>(IJavaObject)

Führt eine android-laufzeitgecheckte Typkonvertierung aus.

JavaCast<TResult>(IJavaObject)

Basisschnittstelle für ein remotable-Objekt, der Kernteil eines einfachen Remoteprozeduraufrufmechanismus, der für eine hohe Leistung bei in-Process- und prozessübergreifenden Aufrufen entwickelt wurde.

GetJniTypeName(IJavaPeerable)

Basisschnittstelle für ein remotable-Objekt, der Kernteil eines einfachen Remoteprozeduraufrufmechanismus, der für eine hohe Leistung bei in-Process- und prozessübergreifenden Aufrufen entwickelt wurde.

Gilt für: