Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- #큐구조 #큐다운로드
- TwomonUSB
- TowmonUSB 연결오류
- var 와 val
- 데이터바인딩
- withContext
- json 저장
- livedata
- compse state
- 라이브데이터 postValue
- apk이름변경
- 코틀린 이미지저장 #파일저장
- Room 데이터베이스 업데이트
- mutable
- 코틀린 트리거 버튼
- compse collectAsState
- 토글 험수
- 안드로이드 스튜디오 애뮬레이터
Archives
- Today
- Total
EnjoyLife
코루틴의 withContext(Dispatchers.Main) 사용하는 이유 본문
백그라운드 스레드 사용해서 메인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 접근 가능하다.
'안드로이드 개발 > 개발팁' 카테고리의 다른 글
이미지를 내부 저장소에 저장하는 함수 (0) | 2024.05.01 |
---|---|
LiveData 의 변수는 언제 posVaue 와 value 을 골라서 써야될까? (0) | 2024.04.19 |
초간단 리사이클러뷰 (0) | 2024.04.02 |
버튼에 데이터 바인딩으로 트리거를 달자 (0) | 2024.03.21 |
Error while waiting for device: Timed out after 300seconds waiting for emulator to come online. (0) | 2024.01.11 |