inflearn logo
강의

Course

Instructor

Frozen Coder's Easy Introduction to Modern Android Development

Flow Basics

Coroutine, Flow 질문

379

ksgking1124366

3 asked

0

안녕하세요. 강의 잘 듣고 있습니다!
아래 질문이랑 거의 비슷한 질문이긴한데 확실히 하고싶어 문의드립니다

 

 

import kotlinx.coroutines.*

import kotlinx.coroutines.flow.*

fun main() = runBlocking<Unit> {

// Launch a concurrent coroutine to check if the main thread is blocked

launch {

for (k in 1..3) {

println("I'm not blocked $k")

delay(100)

}

}

// Collect the flow

simple().collect { value -> println(value) }

// println("test")

}

fun simple(): Flow<Int> = flow { // flow builder

for (i in 1..3) {

delay(100) // pretend we are doing something useful here

emit(i) // emit next value

}

}

 

  1. runBlocking{} 내부에서 launch {} 로 코루틴이 생성

  2. 그다음 simple().collect{} 코드가 실행되는데 이것도 코루틴으로서 생성

  3. launch 로 생성한 코루틴이 실행 -> println("I'm not blocked $k") 코드 출력

  4. flow 코루틴 실행-> collect 된 value 출력

  5. 3,4 반복

이해한게 맞을까요?

 

그리고 타이밍에 따라서 결과값이

1
I'm not blocked 1

2

I'm not blocked 2

3

I'm not blocked 3

 

이렇게 나올수도 있나요? 챗지피티는 타이밍 때문에 출력 순서가 바뀔수 있다고 해서요 ..

android kotlin 아키텍처 jetpack

Answer 1

0

frozencoder

올려주신 코드를 실행시켜보시면 반환값은 다음과 같이 나오게 됩니다.

I'm not blocked 1
1
I'm not blocked 2
2
I'm not blocked 3
3

 

https://play.kotlinlang.org/#eyJ2ZXJzaW9uIjoiMS45LjIyIiwicGxhdGZvcm0iOiJqYXZhIiwiYXJncyI6IiIsIm5vbmVNYXJrZXJzIjp0cnVlLCJ0aGVtZSI6ImlkZWEiLCJjb2RlIjoiaW1wb3J0IGtvdGxpbnguY29yb3V0aW5lcy4qXG5pbXBvcnQga290bGlueC5jb3JvdXRpbmVzLmZsb3cuKlxuXG5cbmZ1biBtYWluKCkgPSBydW5CbG9ja2luZzxVbml0PiB7XG4gICAgLy8gTGF1bmNoIGEgY29uY3VycmVudCBjb3JvdXRpbmUgdG8gY2hlY2sgaWYgdGhlIG1haW4gdGhyZWFkIGlzIGJsb2NrZWRcbiAgICBsYXVuY2gge1xuICAgICAgICBmb3IgKGsgaW4gMS4uMykge1xuICAgICAgICAgICAgcHJpbnRsbihcIkknbSBub3QgYmxvY2tlZCAka1wiKVxuICAgICAgICAgICAgZGVsYXkoMTAwKVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIENvbGxlY3QgdGhlIGZsb3dcbiAgICBzaW1wbGUoKS5jb2xsZWN0IHsgdmFsdWUgLT4gcHJpbnRsbih2YWx1ZSkgfVxuLy8gICAgIHByaW50bG4oXCJ0ZXN0XCIpIFxufVxuXG5mdW4gc2ltcGxlKCk6IEZsb3c8SW50PiA9IGZsb3cgeyAvLyBmbG93IGJ1aWxkZXJcbiAgICBmb3IgKGkgaW4gMS4uMykge1xuICAgICAgICBkZWxheSgxMDApIC8vIHByZXRlbmQgd2UgYXJlIGRvaW5nIHNvbWV0aGluZyB1c2VmdWwgaGVyZVxuICAgICAgICBlbWl0KGkpIC8vIGVtaXQgbmV4dCB2YWx1ZVxuICAgIH1cbn0ifQ==

Transformations import 안됨

0

570

1

moshi관련 질문입니다.

0

539

2

searchBooks() 에서 북 검색 입력을 너무 빨리 할 경우 마지막 글자로 검색이 안돼요.

0

352

1

안드로이드에서 아키텍처 패턴

0

403

1

RecyclerView.Adapter vs ListAdpater

0

459

1

Flows 와 Coroutine

1

554

1

[BookSearchAdapter] onBindViewHolder의 currentList[position] 질문

0

357

1

코루틴 메모리 관련해서 질문드립니다!

0

441

1

Java Bill Pugh Solution 에서 INSTANCE

0

457

1

nested json에서 특정 부분만 파싱하는법

0

484

1

Fragment에서의 viewBinding

0

511

3

toolbar 질문드립니다.

0

402

2

EditText 에서 delay 주셔서 처리하셨는데 flow 의 debounce() 하고 같은건가요?

2

559

1

코루틴 관련 질문

0

538

1

오류

1

488

2

강사님! 직렬화 라이브러리를 Moshi, kotlin serialization 두개를 사용하시던데 이유가 있으신가요?

1

737

1

EditText 는 kill 해도 값이 잘 저장되어있던데 혹시 제가 잘못테스트했을까요?

1

342

1

서버도 페이징 기능이 되는데 Paging 라이브러리가 필요할까요?

1

519

1

GSON 이 아닌 Moshi 를 사용하시는 이유가 있을까요?

1

1262

1

EditText 는 액티비티가 재생성되어도 값이 남아있던데 이유가 궁금해요

1

491

1

ViewModel 생성시 왜 초기값을 받지 않도록 했을까요?

1

431

1

Room DB에 id 항목 추가

0

246

1

안녕하세요. 용어에 대해 질문이 있어 글 남깁니다.

0

395

2

paging config pageSize 관련

0

421

1