시배's Android

Kotlin 동시성 프로그래밍 | 2장. 코루틴 인 액션 본문

Book/Kotlin 동시성 프로그래밍

Kotlin 동시성 프로그래밍 | 2장. 코루틴 인 액션

si8ae 2023. 7. 9. 21:33

안드로이드의 UI 스레드 

  • 안드로이드는 뷰 계층을 생성하지 않은 스레드가 관련 뷰를 업데이트하려고 할 때마다 CalledFromWrongThreadException을 발생시킨다.
  • 자바에서의 네트워크 동작은 기본적으로 블로킹된다. NetworkOnMainThreadException 발생
  • 백그라운드에서 요청하고, UI 스레드에서 업데이트할 것

스레드 생성

  • CoroutineDispatcher
    • 기본적으로 가용성, 부하, 설정을 기반으로 스레드 간에 코루틴을 분산하는 오케스트레이터다.
  • asyn()는 Deferred<T>를 반환하는데, 디퍼트 코루틴 프레임워크에서 제공하는 취소 불가능한 넌블로킹 퓨처를 의미한다.
  • asyn() 블록 안에서 발생하는 예외는 그 결과에 첨부되는데, isCancelled와 getCancellationException() 메소드를 함께 사용해 안전하게 예외를 가져올 수 있다.
  • join()은 예외를 전파하지 않고 처리하는 반면, await()는 단지 호출하는 것만으로 예외가 전파된다는 점이다.
  • launch()는 연산이 실패한 경우에만 통보 받기를 원하는 파이어-앤-포겟 시나리오를 위해 설계됐다.
  • 예외가 출력되지만 실행이 중단되지 않는다.