IBinder Interface
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Interface base para um objeto remoto, a parte principal de um mecanismo de chamada de procedimento remoto leve projetado para alto desempenho ao executar chamadas em processo e entre processos.
[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
- Derivado
- Atributos
- Implementações
Comentários
Interface base para um objeto remoto, a parte principal de um mecanismo de chamada de procedimento remoto leve projetado para alto desempenho ao executar chamadas em processo e entre processos. Essa interface descreve o protocolo abstrato para interagir com um objeto remoto. Não implemente essa interface diretamente, em vez disso, estenda-se de Binder.
A API do IBinder de chave é #transact transact() correspondida por Binder#onTransact Binder.onTransact(). Esses métodos permitem que você envie uma chamada para um objeto IBinder e receba uma chamada chegando a um objeto Binder, respectivamente. Essa API de transação é síncrona, de modo que uma chamada não #transact transact() retorne até que o destino tenha retornado Binder#onTransact Binder.onTransact(); esse é o comportamento esperado ao chamar um objeto que existe no processo local, e o mecanismo de IPC (comunicação interprocesso) subjacente garante que essas mesmas semânticas se apliquem ao passar por processos.
Os dados enviados por meio de transact() são um Parcelbuffer genérico de dados que também mantém alguns metadados sobre seu conteúdo. Os metadados são usados para gerenciar referências de objeto IBinder no buffer, de modo que essas referências possam ser mantidas à medida que o buffer se move entre processos. Esse mecanismo garante que, quando um IBinder for gravado em um Pacote e enviado para outro processo, se esse outro processo enviar uma referência para o mesmo IBinder de volta ao processo original, o processo original receberá o mesmo objeto IBinder de volta. Essas semânticas permitem que objetos IBinder/Binder sejam usados como uma identidade exclusiva (para servir como um token ou para outras finalidades) que podem ser gerenciados entre processos.
O sistema mantém um pool de threads de transação em cada processo em que ele é executado. Esses threads são usados para expedir todos os IPCs provenientes de outros processos. Por exemplo, quando um IPC é feito do processo A para o processo B, o thread de chamada em Blocos A em transact() como ele envia a transação para o processo B. O próximo thread de pool disponível em B recebe a transação de entrada, chama Binder.onTransact() no objeto de destino e responde com o Pacote de resultados. Ao receber seu resultado, o thread no processo A retorna para permitir que sua execução continue. Na verdade, outros processos parecem ser usados como threads adicionais que você não criou executando em seu próprio processo.
O sistema Binder também dá suporte à recursão entre processos. Por exemplo, se o processo A executar uma transação para processar B e processar B durante o tratamento dessas chamadas de transação transact() em um IBinder implementado em A, o thread em A que está atualmente aguardando a conclusão da transação original cuidará de chamar Binder.onTransact() no objeto que está sendo chamado por B. Isso garante que a semântica de recursão ao chamar o objeto associador remoto seja a mesma que ao chamar objetos locais.
Ao trabalhar com objetos remotos, você geralmente deseja descobrir quando eles não são mais válidos. Há três maneiras de determinar isso: <ul><li> O #transact transact() método gerará uma RemoteException exceção se você tentar chamá-la em um IBinder cujo processo não existe mais.
<li> O #pingBinder() método pode ser chamado e retornará false se o processo remoto não existir mais.
<li> O #linkToDeath linkToDeath() método pode ser usado para registrar um DeathRecipient com o IBinder, que será chamado quando o processo de contenção desaparecer.
</ul>
Java documentação para android.os.IBinder.
Partes desta página são modificações baseadas no trabalho criado e compartilhado pelo Project Open Source do Open Source e usadas de acordo com os termos descritos na Creative Commons 2.5.
Campos
| Nome | Description |
|---|---|
| DumpTransaction |
Código de transação de protocolo IBinder: despejar o estado interno. |
| FirstCallTransaction |
O primeiro código de transação disponível para comandos de usuário. |
| InterfaceTransaction |
Código de transação de protocolo IBinder: interrogue o lado do destinatário da transação para seu descritor de interface canônica. |
| LastCallTransaction |
O último código de transação disponível para comandos de usuário. |
| LikeTransaction |
Código de transação de protocolo IBinder: informe a um aplicativo de forma assíncrona que o chamador gosta dele. |
| PingTransaction |
Código de transação de protocolo IBinder: pingBinder(). |
| TweetTransaction |
Código de transação de protocolo IBinder: envie um tweet para o objeto de destino. |
Propriedades
| Nome | Description |
|---|---|
| Handle |
Obtém o valor JNI do objeto Android subjacente. (Herdado de IJavaObject) |
| InterfaceDescriptor |
Obtenha o nome canônico da interface compatível com esse associador. |
| IsBinderAlive |
Verifique se o processo em que o associador está ainda está vivo. |
| JniIdentityHashCode |
Retorna o valor da |
| JniManagedPeerState |
Estado do par gerenciado. (Herdado de IJavaPeerable) |
| JniObjectReferenceControlBlock |
Interface base para um objeto remoto, a parte principal de um mecanismo de chamada de procedimento remoto leve projetado para alto desempenho ao executar chamadas em processo e entre processos. (Herdado de IJavaPeerable) |
| JniPeerMembers |
Acesso ao membro e suporte à invocação. (Herdado de IJavaPeerable) |
| PeerReference |
Retorna uma JniObjectReference das instâncias de objeto Java encapsuladas. (Herdado de IJavaPeerable) |
| SuggestedMaxIpcSizeBytes |
Limite que deve ser colocado em tamanhos de IPC, em bytes, para mantê-los com segurança sob o limite do buffer de transação. |
Métodos
| Nome | Description |
|---|---|
| AddFrozenStateChangeCallback(IExecutor, IBinder+IFrozenStateChangeCallback) |
Esse método fornece um mecanismo de retorno de chamada para notificar sobre eventos congelados/descongeladas do processo. |
| Disposed() |
Chamado quando a instância foi descartada. (Herdado de IJavaPeerable) |
| DisposeUnlessReferenced() |
Se não houver referências pendentes a essa instância, então chamará |
| Dump(FileDescriptor, String[]) |
Imprima o estado do objeto no fluxo fornecido. |
| DumpAsync(FileDescriptor, String[]) |
Como |
| Finalized() |
Chamado quando a instância foi finalizada. (Herdado de IJavaPeerable) |
| LinkToDeath(IBinderDeathRecipient, Int32) |
Registre o destinatário para uma notificação se esse associador desaparecer. |
| PingBinder() |
Verifique se o objeto ainda existe. |
| QueryLocalInterface(String) |
Tente recuperar uma implementação local de uma interface para este objeto Binder. |
| RemoveFrozenStateChangeCallback(IBinder+IFrozenStateChangeCallback) |
Cancelar o registro de um FrozenStateChangeCallback . O retorno de chamada não será mais invocado quando o processo de hospedagem alterar seu estado congelado. |
| SetJniIdentityHashCode(Int32) |
Defina o valor retornado por |
| SetJniManagedPeerState(JniManagedPeerStates) |
Interface base para um objeto remoto, a parte principal de um mecanismo de chamada de procedimento remoto leve projetado para alto desempenho ao executar chamadas em processo e entre processos. (Herdado de IJavaPeerable) |
| SetPeerReference(JniObjectReference) |
Defina o valor retornado por |
| Transact(Int32, Parcel, Parcel, TransactionFlags) |
Execute uma operação genérica com o objeto. |
| UnlinkToDeath(IBinderDeathRecipient, Int32) |
Remova uma notificação de morte registrada anteriormente. |
| UnregisterFromRuntime() |
Cancele o registro dessa instância para que o runtime não a retorne de invocações futuras Java.Interop.JniRuntime+JniValueManager.PeekValue . (Herdado de IJavaPeerable) |
Métodos de Extensão
| Nome | Description |
|---|---|
| GetJniTypeName(IJavaPeerable) |
Obtém o nome JNI do tipo da instância |
| JavaAs<TResult>(IJavaPeerable) |
Tente coagir a digitar |
| JavaCast<TResult>(IJavaObject) |
Executa uma conversão de tipo verificada pelo tempo de execução do Android. |
| JavaCast<TResult>(IJavaObject) |
Interface base para um objeto remoto, a parte principal de um mecanismo de chamada de procedimento remoto leve projetado para alto desempenho ao executar chamadas em processo e entre processos. |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
Tente coagir a digitar |