반응형
Dispatcher 는 Coroutine 에서 사용하는 Thread 를 구분하는 용도 입니다
조심해야 할 것은 UI 를 그리는 Thread 에서 IO 또는 CPU 를 사용하는 명령을 같이 실행하면 APP Crash 발생합니다.
툭하면 겪는 상황이고 대부분 viewModelScope.launch(Dispatcher.IO) 설정해서 해결하고 있습니다
안드로이드에서는 3가지 Thread 밖에 없으니 아래 표만 기억하면 됩니다
viewModelScope.launch <== 이렇게 사용하면 Default 입니다
구분 | Dispatcher.Default | Dispatcher.IO | Dispatcher.Main |
용도 | CPU 많이 사용시 | Disk 많이 사용시 | UI 그릴 때 |
예제 | json 파싱, 데이터 정렬 | local db 에 read, write | 화면 그리는 전부 다 |
도스게임플레이어 적용 | room db 사용시, retrofit 사용시 | 게임 롬 파일, 저장파일, 이미지 파일 사용시 | toast 메시지나 jetpack compose UI 와 연계할 때 |
보통 화면 그리다가 ViewModel 에서 데이터 처리 할 때
viewModelScope.launch 사용하는 데 Dispatcher.Default 로 로직 처리 하겠다는 겁니다.
로직 처리하다 말고 UI 그리거나 Toast 메시지 표현하려면
viewModelScope.launch(Dispatcher.Main) 으로 감쌓아야 crash 안납니다.
viewModel 에서 로직처리시 (Usecase 사용시) viewModelScope.launch 로 감싸면 됩니다.
대부분 Default 사용하고 가끔 IO 사용하면 됩니다.
메시지 뿌릴려면 Main 사용
끝
반응형
'IT > 안드로이드' 카테고리의 다른 글
change splash activity to splash api for android 12 (0) | 2023.07.13 |
---|---|
png to xml for android logo (0) | 2023.07.13 |
jetpack compose Review URL Open (0) | 2023.07.13 |
안드로이드 기기 카탈로그 (android catalog) (1) | 2023.05.08 |
jetpack compose paging3 사용시 주의사항 (immutable 데이터만 사용) (1) | 2023.05.08 |
android studio different debug vs release libraries version (0) | 2023.04.26 |
안드로이드 코드명과 빌드 번호 참고 (0) | 2023.03.11 |
jetpack compose 에서 MutableStateFlow vs MutableState (0) | 2023.02.16 |