Estou tentando algo novo no Android para o qual preciso acessar o manipulador do thread de interface do usuário.
Eu sei o seguinte:
- O thread de IU tem seu próprio manipulador e looper
- Qualquer mensagem será colocada na fila de mensagens do thread da IU
- O looper pega o evento e o passa para o manipulador
- O manipulador lida com a mensagem e envia o evento específico para a IU
Eu quero ter meu serviço que precisa obter o manipulador de thread de IU e colocar uma mensagem neste manipulador. Para que esta mensagem seja processada e emitida para a IU. Aqui, o serviço será um serviço normal que será iniciado por algum aplicativo.
Eu gostaria de saber se isso é possível. Se sim, sugira alguns trechos de código, para que eu possa tentar.
Atenciosamente, Girish
fonte
Crie um
Messenger
objeto anexado ao seuHandler
e passeMessenger
-o para oService
(por exemplo, em umIntent
extra parastartService()
). OService
pode então enviar umMessage
para oHandler
viaMessenger
. Aqui está um aplicativo de amostra que demonstra isso.fonte
Handler
, você não pode acessá-lo, AFAIK.ViewRoot
no Android SDK, AFAICT.Handler
/Messenger
, embora eu substitua tudo isso por um barramento de evento (por exemplo, EventBus do greenrobot).No momento, prefiro usar uma biblioteca de ônibus de eventos como a Otto para esse tipo de problema. Basta inscrever os componentes desejados (atividade):
Em seguida, forneça um método de retorno de chamada:
e então quando seu serviço executa uma declaração como esta:
Esse POJO será passado para sua atividade acima e todos os outros componentes de assinatura. Simples e elegante.
fonte
Sugiro tentar o seguinte código:
fonte
Você pode obter valores por meio do receptor de transmissão ...... da seguinte forma, primeiro crie seu próprio IntentFilter como,
Em seguida, crie a classe interna BroadcastReceiver como,
Agora registre seu receptor de transmissão em onResume () como,
E, finalmente, cancele o registro de BroadcastReceiver em onDestroy () como,
Agora, a parte mais importante ... Você precisa disparar a transmissão de onde você precisar enviar valores ... então faça como,
....Felicidades :)
fonte
É
kotlin
assim que você pode fazer issoDigamos se você deseja mostrar mensagem de brinde do serviço
fonte
Solução:
Handler
com aLooper
partir do thread principal: responseHandler ehandleMessage
método overrideRunnable
Tarefa interna , chame sendMessage em responseHandlersendMessage
chamada de resultado de handleMessage em responseHandler.Message
e processe-os, atualize a IUCódigo de amostra:
fonte