IBinder Interface

Definição

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 java.lang.System.identityHashCode() instância encapsulada.

(Herdado de IJavaPeerable)
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á Dispose(); caso contrário, não fará nada.

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

Imprima o estado do objeto no fluxo fornecido.

DumpAsync(FileDescriptor, String[])

Como #dump(FileDescriptor, String[]) , mas sempre é executado de forma assíncrona.

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 JniIdentityHashCode.

(Herdado de IJavaPeerable)
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 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 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 self.

JavaAs<TResult>(IJavaPeerable)

Tente coagir a digitar selfTResult, verificando se a coerção é válida no lado Java.

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 selfTResult, verificando se a coerção é válida no lado Java.

Aplica-se a