EnjoyLife

코루틴의 withContext(Dispatchers.Main) 사용하는 이유 본문

안드로이드 개발/개발팁

코루틴의 withContext(Dispatchers.Main) 사용하는 이유

Aiden96 2024. 4. 17. 09:35

백그라운드 스레드 사용해서 메인UI에 접근이 필요할 경우 사용한다. 

 예를 들어, API 통신시 결과값으로

    CoroutineScope(Dispatchers.IO).launch  안에서 플레이어 화면 갱신 또는 위젯접근시 반드시 withContext(Dispatchers.Main) 을 사용해야 한다. 

 

viewModelScope.launch(Dispatchers.IO) {
    // 백그라운드 스레드에서 실행되는 코드
    val data = database.loadData()  // 데이터베이스에서 데이터를 로드합니다.

    withContext(Dispatchers.Main) {
        // 메인 스레드로 전환하여 UI 업데이트 수행
        textView.text = data  // TextView의 텍스트를 업데이트합니다.
    }

    // withContext 이후의 코드는 다시 Dispatchers.IO(백그라운드 스레드)에서 실행됩니다.
}

 

 

[ viewModelScope.launch(Dispatchers.IO) 와  CoroutineScope(Dispatchers.IO).launch  사용의 차이]

 

1.  viewModelScope.launch(Dispatchers.IO)  뷰모델의 생명주기를 따르기에 액티비티가 종료되면 

실행을 멈춘다.

2.  CoroutineScope(Dispatchers.IO).launch   독자적으로 실행되기에 액티비티 종료되도 실행된다.

 

질문) CoroutineScope(Dispatchers.IO).launch   에서 withContext(Dispatchers.Main) 을 사용해도 되나?

 

답변) 당연하다.   viewModelScope.launch(Dispatchers.IO)  와   CoroutineScope(Dispatchers.IO).launch  둘다

 

안에  withContext(Dispatchers.Main)  선언하면 메인ui 접근 가능하다.