Introdução às corrotinas Kotlin
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?
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.
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.
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





































![O que é uma lista vinculada, afinal? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)