Alguém pode me dizer se há alguma diferença entre usar runOnUiThread () e Looper.getMainLooper (). Post () para executar uma tarefa no thread de IU no Android?
Praticamente a única coisa que posso determinar é que, uma vez que runOnUiThread é um método Activity não estático, Looper.getMainLooper (). Post () é mais conveniente quando você precisa codificar algo em uma classe que não pode ver a Activity (como uma interface).
Não estou procurando uma discussão sobre SE algo deve ser executado no thread de interface do usuário, percebi que algumas coisas não podem e muitas coisas não deveriam, no entanto, algumas coisas (como iniciar uma AsyncTask) DEVEM ser executadas a partir de o thread da IU.
Obrigado
R.
android
android-ui
Rico
fonte
fonte
runOnUiThread
irá verificar se já é o thread de interface do usuário e executar sua tarefa diretamente em vez de postá-la como umMessage
Respostas:
O seguinte se comporta da mesma forma quando chamado de threads de fundo:
usando
Looper.getMainLooper()
usando
Activity#runOnUiThread()
A única diferença é quando você faz isso a partir do thread da IU, já que
irá verificar se o Thread atual já é o thread da interface do usuário e executá-lo diretamente. Postá-lo como uma mensagem atrasará a execução até que você retorne do método de thread de interface do usuário atual.
Há também uma terceira maneira de executar um
Runnable
no thread de UI que seriaView#post(Runnable)
- esta sempre postará a mensagem, mesmo quando chamada a partir do thread de UI. Isso é útil, pois garante que oView
foi construído corretamente e tem um layout antes de o código ser executado.fonte