안드로이드

[안드로이드] 코루틴 - Scope, Dispacher

이손안나 2022. 10. 12. 23:26

💡 코루틴 스코프 ?

- 코루틴은 코루틴 스코프 안에서만 동작한다.

 

GlobalScope 

  • application이 시작하고 종료될 때까지 계속 유지된다.
  • 싱글톤으로 따로 생성하지 않아도 어디에서든 바로 접근 가능하다.
  • 특정 activity 나 service에서 잠깐 사용하는 것이라면 사용을 안한다.

LifecycleScope

  • 해당 라이프사이클 소유자의 생명주기와 연계되어있다.
  • destroyed될 때 자동으로 스코프가 취소된다.

ViewModelScope 

  • 뷰모델에 연결된 스코프로 뷰모델이 지워지면 취소된다.

runBlocking 

  • runBlocking에 넘겨준 코루틴 로직을 모두 수행 할 때까지 기다린다.

💡 코루틴 dispatcher ?

  1. Dispatchers.IO
    • 코루틴은 공유된 스레드 풀로에 있는 백스라운드 스레드에서 작동합니다.
    • 로컬 DB와 작업할 때, 네트워크 작업 또는 파일과 관련된 작업을 할 때 사용할 것입니다.
  2. Dispatchers.Main
    • 코루틴이 메인스레드에서 실행됩니다.
    • ui 관련 함수, suspending 함수, LiveData에서 수정사항을 가져오는 함수 등 작고, 가벼운 작업들만 실행시킬 것입니다.
    • 권장사항은(best practice) 코루틴을 메인스레이드에 시작하고 백그라운드 스레드로 변경하는 것입니다.
  3. Dispatchers.Default
    • 많은 리스트를 정렬하는 작업같이 CPU 부하가(intensive) 많은 작업들을 할 때 사용할 것입니다.