IBinder Interface
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
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 Parcel
mé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 |
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 |
Dump(FileDescriptor, String[]) |
Imprimez l’état de l’objet dans le flux donné. |
DumpAsync(FileDescriptor, String[]) |
Comme |
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 |
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 |
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. |