안드로이드 UI 스레드 구조

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/19ef60b2-b20e-4e11-9313-789c751223b4/Untitled.png

CallFromWrongThreadException

Background Thread → UI 업데이트

NetworkOnMainThreadException

Main Thread → Network 요청

CoroutineDispatcher

스레드 간 코루틴 분산 오케스트레이터 (스레드 및 스레드풀 추상화 계층)

coroutine.join() && coroutine.isCacelled

val task = GlobalScope.async {
  doSomething()
}

task.join()

if (task.isCancelled) {
  val exception = task.getCancellationException()
  println("오류: ${exception.cause}")
} else {
  println("오류없이 성공")
}

coroutine.await()

val task = GlobalScope.async {
  doSomething()
}

task.await()

println("성공")

launch vs async

launch: fire-and-forget 컨셉

val task = GlobalScope.launch {
  doSomething()
}

task.join()

println("완료")

launch(dispatcher)