IBinder Schnittstelle
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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 Parcel
generischer 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 |
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 |
Dump(FileDescriptor, String[]) |
Drucken Sie den Zustand des Objekts in den angegebenen Datenstrom. |
DumpAsync(FileDescriptor, String[]) |
"Gefällt |
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 |
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 |
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. |