Compartilhar via


IBinder Interface

Definição

Interface base para um objeto remota, a parte central 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 remota, a parte central de um mecanismo de chamada de procedimento remoto leve projetado para alto desempenho ao executar chamadas em processo e entre processos. Esta interface descreve o protocolo abstrato para interagir com um objeto remota. Não implemente essa interface diretamente, em vez disso, estenda do Binder.

A chave IBinder API é #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 para #transact transact() não retorna até que o destino tenha retornado de Binder#onTransact Binder.onTransact(), esse é o comportamento esperado ao chamar um objeto que existe no processo local, e o mecanismo de comunicação entre processos (IPC) subjacente garante que essa mesma semântica se aplique ao atravessar processos.

Os dados enviados através de transact() é um Parcel, um buffer 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, para que essas referências possam ser mantidas à medida que o buffer se move entre processos. Esse mecanismo garante que quando um IBinder é gravado em um Pacote e enviado para outro processo, se esse outro processo enviar uma referência a esse mesmo IBinder de volta ao processo original, o processo original receberá o mesmo objeto IBinder de volta. Essa semântica permite que os objetos IBinder/Binder sejam usados como uma identidade exclusiva (para servir como um token ou para outros fins) que pode ser gerenciada entre processos.

O sistema mantém um pool de threads de transação em cada processo em que é executado. Esses threads são usados para despachar 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 A bloqueia em transact() à medida que 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 resultado Parcel. Ao receber seu resultado, o thread no processo A retorna para permitir que sua execução continue. Na verdade, outros processos parecem usar como threads adicionais que você não criou executando em seu próprio processo.

O sistema Binder também suporta recursão entre processos. Por exemplo, se o processo A executar uma transação para processar B e processar B ao manipular essas 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 se encarregará de chamar Binder.onTransact() no objeto que está sendo chamado por B. Isso garante que a semântica de recursão ao chamar objeto de fichário 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 lançará uma RemoteException exceção se você tentar chamá-lo 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 seu processo de contenção desaparecer. </ul>

Documentação Java para android.os.IBinder.

Partes desta página são modificações baseadas no trabalho criado e compartilhado pelo Android Open Source Project e usado de acordo com os termos descritos na Creative Commons 2.5 Attribution License.

Campos

DumpTransaction

Código de transação do protocolo IBinder: estado interno de dump.

FirstCallTransaction

O primeiro código de transação disponível para comandos de usuário.

InterfaceTransaction

Código de transação do protocolo IBinder: interrogar o lado 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 do protocolo IBinder: diga a um aplicativo de forma assíncrona que o chamador gosta dele.

PingTransaction

Código de transação do protocolo IBinder: pingBinder().

TweetTransaction

Código de transação do protocolo IBinder: envie um tweet para o objeto de destino.

Propriedades

Handle

Obtém o valor JNI do objeto Android subjacente.

(Herdado de IJavaObject)
InterfaceDescriptor

Obtenha o nome canônico da interface suportada por este fichário.

IsBinderAlive

Verifique se o processo em que o fichário está ainda está vivo.

JniIdentityHashCode

Retorna o valor de java.lang.System.identityHashCode() para a instância encapsulada.

(Herdado de IJavaPeerable)
JniManagedPeerState

Estado do par gerenciado.

(Herdado de IJavaPeerable)
JniPeerMembers

Acesso de membros e suporte à invocação.

(Herdado de IJavaPeerable)
PeerReference

Retorna uma JniObjectReference das instâncias do objeto Java encapsulado.

(Herdado de IJavaPeerable)
SuggestedMaxIpcSizeBytes

Limite que deve ser colocado em tamanhos de IPC, em bytes, para mantê-los com segurança sob o limite de buffer de transação.

Métodos

Disposed()

Chamado quando a instância tiver sido descartada.

(Herdado de IJavaPeerable)
DisposeUnlessReferenced()

Se não houver referências pendentes a este caso, então chame Dispose(), caso contrário, não faz nada.

(Herdado de IJavaPeerable)
Dump(FileDescriptor, String[])

Imprima o estado do objeto no fluxo fornecido.

DumpAsync(FileDescriptor, String[])

Gosta, #dump(FileDescriptor, String[]) mas sempre executa de forma assíncrona.

Finalized()

Chamado quando a instância tiver sido finalizada.

(Herdado de IJavaPeerable)
LinkToDeath(IBinderDeathRecipient, Int32)

Registre o destinatário para uma notificação se esse fichário desaparecer.

PingBinder()

Verifique se o objeto ainda existe.

QueryLocalInterface(String)

Tente recuperar uma implementação local de uma interface para esse objeto Binder.

SetJniIdentityHashCode(Int32)

Defina o valor retornado por JniIdentityHashCode.

(Herdado de IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

Interface base para um objeto remota, a parte central 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 PeerReference.

(Herdado de IJavaPeerable)
Transact(Int32, Parcel, Parcel, TransactionFlags)

Execute uma operação genérica com o objeto.

UnlinkToDeath(IBinderDeathRecipient, Int32)

Remova uma notificação de óbito registrada anteriormente.

UnregisterFromRuntime()

Cancele o registro dessa instância para que o tempo de execução não a retorne de chamadas futuras Java.Interop.JniRuntime+JniValueManager.PeekValue .

(Herdado de IJavaPeerable)

Métodos de Extensão

JavaCast<TResult>(IJavaObject)

Executa uma conversão de tipo verificada em tempo de execução do Android.

JavaCast<TResult>(IJavaObject)

Interface base para um objeto remota, a parte central de um mecanismo de chamada de procedimento remoto leve projetado para alto desempenho ao executar chamadas em processo e entre processos.

GetJniTypeName(IJavaPeerable)

Interface base para um objeto remota, a parte central de um mecanismo de chamada de procedimento remoto leve projetado para alto desempenho ao executar chamadas em processo e entre processos.

Aplica-se a