Partager via


IBinder Interface

Définition

Interface de base pour un objet remotable, la partie principale d’un mécanisme d’appel de procédure distante légère conçu pour des performances élevées lors de l’exécution d’appels in-process et inter-processus.

[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
Dérivé
Attributs
Implémente

Remarques

Interface de base pour un objet remotable, la partie principale d’un mécanisme d’appel de procédure distante légère conçu pour des performances élevées lors de l’exécution d’appels in-process et inter-processus. Cette interface décrit le protocole abstrait pour interagir avec un objet remotable. N’implémentez pas directement cette interface, au lieu de cela, étendez à partir de Binder.

L’API IBinder clé est #transact transact() mises en correspondance par Binder#onTransact Binder.onTransact(). Ces méthodes vous permettent d’envoyer un appel à un objet IBinder et de recevoir un appel entrant dans un objet Binder, respectivement. Cette API de transaction est synchrone, de sorte qu’un appel à #transact transact() ne retourne pas tant que la cible n’est pas retournée Binder#onTransact Binder.onTransact(); il s’agit du comportement attendu lors de l’appel d’un objet qui existe dans le processus local, et le mécanisme de communication inter-processus (IPC) sous-jacent garantit que ces mêmes sémantiques s’appliquent lors de l’exécution de processus.

Les données envoyées via transact() sont une Parcelmémoire tampon générique de données qui conserve également certaines métadonnées sur son contenu. Les métadonnées sont utilisées pour gérer les références d’objet IBinder dans la mémoire tampon, afin que ces références puissent être conservées à mesure que la mémoire tampon se déplace entre les processus. Ce mécanisme garantit que lorsqu’un IBinder est écrit dans un colis et envoyé à un autre processus, si cet autre processus envoie une référence à ce même IBinder au processus d’origine, le processus d’origine reçoit le même objet IBinder. Ces sémantiques permettent aux objets IBinder/Binder d’être utilisés comme une identité unique (pour servir de jeton ou à d’autres fins) qui peuvent être gérés entre les processus.

Le système gère un pool de threads de transaction dans chaque processus dans lequel il s’exécute. Ces threads sont utilisés pour distribuer toutes les adresses IP provenant d’autres processus. Par exemple, lorsqu’un IPC est effectué du processus A au processus B, le thread appelant dans A blocs dans transact() lorsqu’il envoie la transaction au processus B. Le thread de pool disponible suivant dans B reçoit la transaction entrante, appelle Binder.onTransact() sur l’objet cible et répond avec le résultat Parcel. Lors de la réception de son résultat, le thread dans le processus A retourne pour permettre à son exécution de continuer. En effet, d’autres processus semblent utiliser comme threads supplémentaires que vous n’avez pas créés en cours d’exécution dans votre propre processus.

Le système Binder prend également en charge la récursivité entre les processus. Par exemple, si le processus A effectue une transaction pour traiter B et que le processus B lors de la gestion de cette transaction appelle transact() sur un IBinder implémenté dans A, le thread dans A qui attend actuellement la fin de la transaction d’origine s’occupe de l’appel de Binder.onTransact() sur l’objet appelé par B. Cela garantit que la sémantique de récursivité lors de l’appel d’un objet binder distant est la même que lors de l’appel d’objets locaux.

Lorsque vous utilisez des objets distants, vous souhaitez souvent savoir quand ils ne sont plus valides. Il existe trois façons de déterminer : <ul<>li> La #transact transact() méthode lève une RemoteException exception si vous essayez de l’appeler sur un IBinder dont le processus n’existe plus. <li> La #pingBinder() méthode peut être appelée et retourne false si le processus distant n’existe plus. <li> La #linkToDeath linkToDeath() méthode peut être utilisée pour inscrire un DeathRecipient IBinder, qui sera appelé lorsque son processus conteneur disparaît. </ul>

Documentation Java pour android.os.IBinder.

Les parties de cette page sont des modifications basées sur le travail créé et partagé par le projet Android Open Source et utilisés en fonction des termes décrits dans la licence d’attribution Creative Commons 2.5.

Champs

DumpTransaction

Code de transaction du protocole IBinder : état interne de vidage.

FirstCallTransaction

Le premier code de transaction disponible pour les commandes utilisateur.

InterfaceTransaction

Code de transaction du protocole IBinder : interrogez le côté destinataire de la transaction pour son descripteur d’interface canonique.

LastCallTransaction

Dernier code de transaction disponible pour les commandes utilisateur.

LikeTransaction

Code de transaction du protocole IBinder : indiquez à une application de manière asynchrone que l’appelant l’aime.

PingTransaction

Code de transaction du protocole IBinder : pingBinder().

TweetTransaction

Code de transaction du protocole IBinder : envoyez un tweet à l’objet cible.

Propriétés

Handle

Obtient la valeur JNI de l’objet Android sous-jacent.

(Hérité de IJavaObject)
InterfaceDescriptor

Obtenez le nom canonique de l’interface prise en charge par ce classeur.

IsBinderAlive

Vérifiez si le processus dans lequel se trouve le classeur est toujours actif.

JniIdentityHashCode

Retourne la valeur de java.lang.System.identityHashCode() l’instance encapsulée.

(Hérité de IJavaPeerable)
JniManagedPeerState

État de l’homologue managé.

(Hérité de IJavaPeerable)
JniPeerMembers

Prise en charge de l’accès aux membres et de l’appel.

(Hérité de IJavaPeerable)
PeerReference

Retourne une JniObjectReference instance d’objet Java encapsulée.

(Hérité de IJavaPeerable)
SuggestedMaxIpcSizeBytes

Limite qui doit être placée sur les tailles IPC, en octets, pour les conserver en toute sécurité sous la limite de mémoire tampon de transaction.

Méthodes

Disposed()

Appelé lorsque l’instance a été supprimée.

(Hérité de IJavaPeerable)
DisposeUnlessReferenced()

S’il n’existe aucune référence en suspens à cette instance, les appels Dispose(); sinon, ne fait rien.

(Hérité de IJavaPeerable)
Dump(FileDescriptor, String[])

Imprimez l’état de l’objet dans le flux donné.

DumpAsync(FileDescriptor, String[])

Comme #dump(FileDescriptor, String[]) mais s’exécute toujours de façon asynchrone.

Finalized()

Appelé lorsque l’instance a été finalisée.

(Hérité de IJavaPeerable)
LinkToDeath(IBinderDeathRecipient, Int32)

Inscrivez le destinataire pour une notification si ce classeur disparaît.

PingBinder()

Vérifiez si l’objet existe toujours.

QueryLocalInterface(String)

Essayez de récupérer une implémentation locale d’une interface pour cet objet Binder.

SetJniIdentityHashCode(Int32)

Définissez la valeur retournée par JniIdentityHashCode.

(Hérité de IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

Interface de base pour un objet remotable, la partie principale d’un mécanisme d’appel de procédure distante légère conçu pour des performances élevées lors de l’exécution d’appels in-process et inter-processus.

(Hérité de IJavaPeerable)
SetPeerReference(JniObjectReference)

Définissez la valeur retournée par PeerReference.

(Hérité de IJavaPeerable)
Transact(Int32, Parcel, Parcel, TransactionFlags)

Effectuez une opération générique avec l’objet.

UnlinkToDeath(IBinderDeathRecipient, Int32)

Supprimez une notification de décès précédemment enregistrée.

UnregisterFromRuntime()

Annulez l’inscription de cette instance afin que le runtime ne le retourne pas à partir d’appels futurs Java.Interop.JniRuntime+JniValueManager.PeekValue .

(Hérité de IJavaPeerable)

Méthodes d’extension

JavaCast<TResult>(IJavaObject)

Effectue une conversion de type vérifiée par le runtime Android.

JavaCast<TResult>(IJavaObject)

Interface de base pour un objet remotable, la partie principale d’un mécanisme d’appel de procédure distante légère conçu pour des performances élevées lors de l’exécution d’appels in-process et inter-processus.

GetJniTypeName(IJavaPeerable)

Interface de base pour un objet remotable, la partie principale d’un mécanisme d’appel de procédure distante légère conçu pour des performances élevées lors de l’exécution d’appels in-process et inter-processus.

S’applique à