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 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 |
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 |
Dump(FileDescriptor, String[]) |
Imprima o estado do objeto no fluxo fornecido. |
DumpAsync(FileDescriptor, String[]) |
Gosta, |
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 |
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 |
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. |