Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

351
Visualizações
kotlin coroutine - how to ensure some commands run on UI main thread when invoked inside coroutine?

i have a very simple coroutine that just does some delay and then what i want it to do is post commands to UI message queue. so run the last two lines on UI thread. here is the coroutine:

async{
    delay(5000)
    doSomething()
    doAnotherThing()
}

I want the last two methods doSomething() and doAnotherThing() to run on the UI thread ? how can this be done ? From what i have read the delay(5000) will automatically run asynchronously but how to make the rest run on UI thread ? To be very clear, i am doing this from an object that was launched from main thread.

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

async creates a coroutine and runs in the Coroutine context, inherited from a CoroutineScope, additional context elements can be specified with context argument. If the context does not have any dispatcher nor any other ContinuationInterceptor, then Dispatchers.Default is used.

If Dispatchers.Default is used then whatever function you invoke in async builder it will run asynchronously. To switch contexts you can use withContext function:

async {
    delay(5000)
    withContext(Dispatchers.Main) {
        // if we use `Dispatchers.Main` as a coroutine context next two lines will be executed on UI thread.
        doSomething()
        doAnotherThing()
    }
}

If async runs in the Dispatchers.Main context you don't need to switch contexts:

var job: Job = Job()
var scope = CoroutineScope(Dispatchers.Main + job)

scope.async {
    delay(5000) // suspends the coroutine without blocking UI thread

    // runs on UI thread
    doSomething() 
    doAnotherThing()
}

Note: async is mainly used for parallel executions. To start a simple coroutine launch builder is used. So you can replace all async functions in those examples on launch function. Also to run coroutine with async builder you need to call await() function on Deferred object which is returned by async function. Here is some additional info.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda