Introdução às corrotinas Kotlin

Dec 07 2022
Uma corrotina é um padrão de design de simultaneidade que você pode usar no Android para simplificar o código executado de forma assíncrona. Coroutines = Co + RoutinesAqui, Co significa cooperação e Routines significa funções.

Uma corrotina é um padrão de design de simultaneidade que você pode usar no Android para simplificar o código executado de forma assíncrona.

Coroutines = Co + Routines
Aqui, Co significa cooperação e Routines significa funções.

Em programas assíncronos , várias tarefas são executadas em paralelo em threads separados sem esperar que as outras tarefas sejam concluídas. Threads são um recurso caro e muitos threads levam a uma sobrecarga de desempenho devido ao alto consumo de memória e uso da CPU.

Quais são as propriedades das corrotinas?

  • Leve : você pode executar muitas corrotinas em um único thread devido ao suporte para suspensão , que não bloqueia o thread em que a corrotina está sendo executada. A suspensão economiza memória em relação ao bloqueio, ao mesmo tempo em que oferece suporte a muitas operações simultâneas.
  • Menos vazamentos de memória : use simultaneidade estruturada para executar operações dentro de um escopo.
  • Suporte de cancelamento integrado : o cancelamento é propagado automaticamente por meio da hierarquia de corrotinas em execução.
  • Integração do Jetpack : muitas bibliotecas do Jetpack incluem extensões que fornecem suporte completo a corrotinas. Algumas bibliotecas também fornecem seu próprio escopo de corrotina que você pode usar para simultaneidade estruturada.

A adição à parte de dependências “build.gradle(Module:App.app)” é feita da seguinte maneira.

Escopos e construtores de corrotina

Construtores de corrotina são funções que nos ajudam a criar uma corrotina. Eles podem ser chamados de funções normais porque não se suspendem. Três construtores de corrotina estão listados abaixo.

runBlocking : Cria uma nova função de co-rotinas e até completar para bloquear o thread principal.

launch : É uma função do construtor que não bloqueia o thread que está executando e retorna o objeto Job. Para usar esta função, precisamos estar no escopo Coroutine.

async : É um construtor de corrotina que retorna algum valor para o chamador. async pode ser usado para executar uma tarefa assíncrona que retorna um valor. Esse valor em termos de Kotlin é um valor Deferred<T>.

Quais são as diferenças de lançamento e assíncrono?

lançar&async

Quais são as diferenças GlobalScope e runBlocking?

O GlobalScope é independente e continua a ser executado mesmo se o thread estiver no fim. Ele é executado durante todo o ciclo de vida do aplicativo.

Saída: runBlocking e GlobalScope

Como no código acima, o GlobalScope continua a ser executado mesmo se o thread terminar.

O que é uma função de suspensão?

Escrever uma função Suspender é como escrever uma função normal. A única diferença é que eles só começam buscando a palavra-chave suspend. Dentro das corrotinas estão as funções que podem ser executadas. A função de suspensão é uma função que pode ser iniciada, pausada e retomada. Um dos pontos mais importantes a serem lembrados sobre as funções de suspensão é que elas só podem ser chamadas de uma co-rotina ou outra função de suspensão.

Saída: basicCoroutinesExample.kt

Usando a função de inicialização , uma nova co-rotina é iniciada simultaneamente com o restante do código.

runBlocking também inicia uma nova corrotina.
Durante runBlocking , o thread atual: main é bloqueado até que todo o código no corpo da função seja executado.

Funções que suspendem são chamadas de funções runningTask .
Ele suspende a corrotina sem bloquear o thread subjacente, mas permite que outras corrotinas sejam executadas e usem o thread subjacente para seu código.

O que são Coroutine Dispatchers?

O Coroutine Dispatcher é a estrutura que decide o thread no qual a corrotina será executada.

Podemos pensar que os despachantes correspondem ao objeto agendador em estruturas reativas (por exemplo, rxJava).

Sabe-se que as corrotinas sempre são iniciadas em um contexto específico, e esse contexto descreve em quais threads a corrotina será iniciada. Em geral, podemos iniciar a corrotina usando o GlobalScope sem passar nenhum parâmetro para ela, isso é feito quando estamos não especificando o thread no qual a co-rotina deve ser iniciada. Este método não nos dá muito controle sobre ele, pois nossa corrotina pode ser iniciada em qualquer thread disponível, pelo que não é possível prever em que thread nossas corrotinas foram iniciadas.

Existem principalmente 4 tipos de Despachantes.

  • Despachante principal
  • Despachante IO
  • Despachante padrão
  • Despachante não confinado
  • Dispatchers.Main — Use este dispatcher para executar uma co-rotina no thread principal do Android. Isso deve ser usado apenas para interagir com a interface do usuário e executar um trabalho rápido. Os exemplos incluem chamar funções de suspensão , executar operações de estrutura de interface do usuário do Android e atualizar LiveDataobjetos.
  • Dispatchers.IO — Este dispatcher é otimizado para executar E/S de disco ou rede fora do thread principal. Os exemplos incluem o uso do componente Room , leitura ou gravação em arquivos e execução de qualquer operação de rede.
  • Dispatchers.Default — Este dispatcher é otimizado para executar trabalho intensivo de CPU fora do thread principal. Exemplos de casos de uso incluem classificar uma lista e analisar JSON.

Recursos