TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo...
Transcript of TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo...
![Page 1: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/1.jpg)
![Page 2: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/2.jpg)
Jeziel Lago/jeziellago @jeziellago
Android Developer | PicPay
InsertKoinIO/koin
coil-kt/coil
![Page 3: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/3.jpg)
Kotlin Channels & FlowHello Streams!
![Page 4: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/4.jpg)
vamos dar uma olhada em Java…🤔
4
Antes de falar de Kotlin Channels,
![Page 5: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/5.jpg)
5
![Page 6: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/6.jpg)
BlockingQueue 6
java.util.concurrent.BlockingQueue
![Page 7: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/7.jpg)
7
![Page 8: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/8.jpg)
8
![Page 9: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/9.jpg)
Channel
9
BlockingQueue
![Page 10: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/10.jpg)
10Channels
![Page 11: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/11.jpg)
Channels 11
![Page 12: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/12.jpg)
Channels 12
![Page 13: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/13.jpg)
13
Tipos de Channels
![Page 14: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/14.jpg)
14
![Page 15: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/15.jpg)
15
Rendezvous Channel
Channel sem buffer
Uma das funções (send ou receive) sempre fica suspensa até que a outra seja chamada.
![Page 16: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/16.jpg)
16
Unlimited Channel
Channel com buffer "ilimitado"
Os producers podem enviar elementos para esse canal, e ele crescerá infinitamente. A chamada de envio nunca será suspensa.
Se não houver mais memória, você receberá uma OutOfMemoryException
![Page 17: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/17.jpg)
17
Conflated Channel
Devolve sempre o elemento mais recente
![Page 18: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/18.jpg)
18
Buffered Channel
Channel com buffer de tamanho fixo
Os producers podem enviar elementos para este canal até que o limite de tamanho seja atingido.
Quando o buffer estiver cheio, a próxima chamada de envio será suspensa até que apareça mais espaço livre.
O tamanho do buffer é 64 por padrão mas pode ser substituído pela configuração DEFAULT_BUFFER_PROPERTY_NAME via JVM
![Page 19: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/19.jpg)
19
Na prática…."
![Page 20: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/20.jpg)
20Qual a saída esperada?
![Page 21: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/21.jpg)
21Qual a saída esperada?launch1
launch2
channel launch3
![Page 22: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/22.jpg)
22Qual a saída esperada?launch1
launch2
channel launch3
send “A1"
![Page 23: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/23.jpg)
23Qual a saída esperada?launch1
launch2
channel launch3
send “A1"
send “B1”
![Page 24: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/24.jpg)
24Qual a saída esperada?launch1
launch2
channel launch3
send “B1”
receive “A1”
![Page 25: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/25.jpg)
25Qual a saída esperada?launch1
launch2
channel launch3
A1
send “B1”
println(“A1”)
![Page 26: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/26.jpg)
26Qual a saída esperada?launch1
launch2
channel launch3
A1
receive “B1”
![Page 27: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/27.jpg)
27Qual a saída esperada?launch1
launch2
channel launch3
A1, B1
println(“B1”)
![Page 28: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/28.jpg)
28Qual a saída esperada?launch1
launch2
channel launch3
A1, B1
send “A2”
![Page 29: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/29.jpg)
29Qual a saída esperada?launch1
launch2
channel launch3
A1, B1
send “A2”
send “B2”
![Page 30: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/30.jpg)
30Qual a saída esperada?launch1
launch2
channel launch3
A1, B1
send “B2”
receive “A2”
![Page 31: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/31.jpg)
31Qual a saída esperada?launch1
launch2
channel launch3
A1, B1, A2
send “B2”
println(“A2”)
![Page 32: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/32.jpg)
32Qual a saída esperada?launch1
launch2
channel launch3
A1, B1, A2
receive “B2”
![Page 33: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/33.jpg)
33Qual a saída esperada?launch1
launch2
channel launch3
A1, B1, A2, B2
println(“B2”)
![Page 34: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/34.jpg)
34Qual a saída esperada?launch1
launch2
channel launch3
A1, B1, A2, B2
![Page 35: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/35.jpg)
35Qual a saída esperada?launch1
launch2
channel launch3
![Page 36: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/36.jpg)
36Qual a saída esperada?launch1
launch2
channel launch3
send “A1”
![Page 37: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/37.jpg)
37Qual a saída esperada?launch1
launch2
channel launch3
Buffer = [“A1”]
![Page 38: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/38.jpg)
38Qual a saída esperada?launch1
launch2
channel launch3
Buffer = [“A1”] send “A2”
![Page 39: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/39.jpg)
39Qual a saída esperada?launch1
launch2
channel launch3
Buffer = [“A1”,“A2”]
![Page 40: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/40.jpg)
40Qual a saída esperada?launch1
launch2
channel launch3
Buffer = [“A1”,“A2”]
send “B1”
![Page 41: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/41.jpg)
41Qual a saída esperada?launch1
launch2
channel launch3
Buffer = [“A1”,“A2”,”B1”]
![Page 42: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/42.jpg)
42Qual a saída esperada?launch1
launch2
channel launch3
Buffer = [“A1”,“A2”,”B1”]
send “B2”
![Page 43: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/43.jpg)
43Qual a saída esperada?launch1
launch2
channel launch3
Buffer = [“A1”,“A2”,”B1”,”B2”]
![Page 44: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/44.jpg)
44Qual a saída esperada?launch1
launch2
channel launch3
Buffer = [“A2”,”B1”,”B2”]
receive “A1”
![Page 45: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/45.jpg)
45Qual a saída esperada?launch1
launch2
channel launch3
A1
Buffer = [“A2”,”B1”,”B2”]
println(“A1”)
![Page 46: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/46.jpg)
46Qual a saída esperada?launch1
launch2
channel launch3
A1
Buffer = [”B1”,”B2”]
receive “A2”
![Page 47: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/47.jpg)
47Qual a saída esperada?launch1
launch2
channel launch3
A1, A2
Buffer = [”B1”,”B2”]
println(“A2”)
![Page 48: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/48.jpg)
48Qual a saída esperada?launch1
launch2
channel launch3
A1, A2
receive “B1”
Buffer = [”B2”]
![Page 49: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/49.jpg)
49Qual a saída esperada?launch1
launch2
channel launch3
A1, A2, B1
Buffer = [”B2”]
println(“B1”)
![Page 50: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/50.jpg)
50Qual a saída esperada?launch1
launch2
channel launch3
A1, A2, B1
receive “B2”
Buffer = []
![Page 51: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/51.jpg)
51Qual a saída esperada?launch1
launch2
channel launch3
A1, A2, B1, B2
Buffer = []
println(“B2”)
![Page 52: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/52.jpg)
52Qual a saída esperada?launch1
launch2
channel launch3
A1, A2, B1, B2
![Page 53: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/53.jpg)
53
Channels podem ser fechados para indicar que não há mais elementos chegando.
![Page 54: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/54.jpg)
54
ClosedReceiveChannelException: Channel was closed
println(5)
Channel Conflated emite o item mais recente
![Page 55: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/55.jpg)
55
Channel & Coroutines Coroutine builder + channel + extension functions
Producers
Consumers
![Page 56: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/56.jpg)
56
1. Channels são ótimos para modelar fontes de dados quentes
Algumas considerações…
2. Deve-se usar um channel quando precisar enviar dados de uma coroutine para outra
a) coroutines são concorrentes b) precisamos de sincronização para trabalhar com qualquer dado na presença de concorrência.
![Page 57: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/57.jpg)
57
Mas e se não precisarmos de concorrência ou
sincronização, mas apenas de fluxos de dados sem
bloqueio?
😟
![Page 58: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/58.jpg)
58
Seja bem-vindo ao Kotlin Flow!
😎
![Page 59: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/59.jpg)
59
Um flow é um stream “frio” de valores
myFlow é apenas a referência da instância do Flow
O código dentro do flow{…} não está ativo e
ainda não há recursos vinculados a ele. %
![Page 60: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/60.jpg)
60
Flow possui duas operações principais
Flowemit(…) collect{…}
![Page 61: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/61.jpg)
61
Algumas maneiras de criar um Flow
flow{…} flowOf(…) .asFlow()
![Page 62: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/62.jpg)
62
Flows podem ser transformados usando alguns operadores
![Page 63: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/63.jpg)
63
Alguns listeners de “eventos”
![Page 64: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/64.jpg)
64
Coroutine context & FlowUse flowOn para especificar o contexto de execução.
![Page 65: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/65.jpg)
65
Coroutine context & FlowUse flowOn para especificar o contexto de execução.
Trecho executado com Dispatchers.IO
![Page 66: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/66.jpg)
66
Coroutine context & FlowUse flowOn para especificar o contexto de execução.
Trecho executado com Dispatchers.Default
![Page 67: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/67.jpg)
67
Coroutine context & FlowUse flowOn para especificar o contexto de execução.
Trecho executado no contexto de quem chamar o collect
![Page 72: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/72.jpg)
72
Wrapping callbacks com callbackFlow
![Page 73: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/73.jpg)
73
Wrapping callbacks com callbackFlow
![Page 74: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/74.jpg)
74
Wrapping callbacks com callbackFlow
![Page 75: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/75.jpg)
75
Wrapping callbacks com callbackFlow
![Page 76: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/76.jpg)
76
Wrapping callbacks com callbackFlow
![Page 77: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/77.jpg)
77
Wrapping callbacks com callbackFlow
![Page 78: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/78.jpg)
78
Considerações Finais ✍
Channel & Flow podem andar juntos
Migração tranquila de RxJava/RxKotlin/RxAndroid para Channel & Flow
Nova versão do Room e WorkManager já usam Flow
API ainda Experimental
![Page 80: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/80.jpg)
Jeziel Lago
/jeziellago @jeziellago
Android Developer | PicPay
Obrigado!
![Page 81: TDC-POA-Kotlin Channels Flow JezielLago · 18 Buffered Channel Channel com buffer de tamanho fixo Os producers podem enviar elementos para este canal até que o limite de tamanho](https://reader030.fdocuments.in/reader030/viewer/2022041114/5f21732d9b0c8147773490c1/html5/thumbnails/81.jpg)
81
Linkshttp://tutorials.jenkov.com/java-util-concurrent/blockingqueue.html
https://medium.com/@elizarov/reactive-streams-and-kotlin-flows-bfd12772cda4
https://medium.com/@elizarov/simple-design-of-kotlin-flow-4725e7398c4c
https://medium.com/@elizarov/execution-context-of-kotlin-flows-b8c151c9309b
https://medium.com/@elizarov/cold-flows-hot-channels-d74769805f9#9f07
https://proandroiddev.com/what-is-concurrent-access-to-mutable-state-f386e5cb8292
https://play.kotlinlang.org/hands-on/Introduction%20to%20Coroutines%20and%20Channels/01_Introduction
https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/-flow/