참고
https://developer.android.com/topic/libraries/architecture/datastore#synchronous
목표
DataStore의 저장 값을 suspend fun 바깥에서 불러오고 싶었다.
(이건 결국엔 DataStore를 동기적으로 쓰고 싶다는 의미라서 제목을 그렇게 넣었다)
기존
runBlocking을 써서 DataStore의 값을 가져오기는 했었다.
그러나 runBlocking이 UI thread를 block하는 거라 ANR 발생 가능성이 있다고 하니까, 공식문서를 살펴본다.
공식 문서 확인
여기보면 DataStore로부터 데이터를 프리로딩하면 ANR 이슈를 줄일 수는 있다고 한다.
결과
공식 문서에서 알려주는 방법
1. runBlocking을 써라.
2. runBlocking을 쓰면서 일어날 수 있는 UI 관련 사이드이펙트 이슈를 줄이기 위해 DataStore 읽기를 비동기적으로 미리 진행해서 캐시 메모리게 값을 저장시켜라.
🤔
DataStore를 동기적으로 쓰는 방법에 대해서는 아쉬움을 느낀다. UI 쓰레드를 막으면서 발생할 이슈에 대해서 가능성만 줄이는 거라, 불안정한 솔루션이라 생각된다. runBlocking와 DataStore를 같이 쓰는 방법(동기 코드로 쓰기)을 최대한 줄이는 쪽을 추구하며 작업해야 하지 않을까 싶었다.
'곳간에서 인심난다 > 실무' 카테고리의 다른 글
[Android][Java] 초성 검색 (0) | 2023.10.28 |
---|---|
[Android][Compose] Compose Canvas를 이용해서 Dot Indicator 만들기 (0) | 2023.10.28 |
[Android]앱 빌드 설정 - zero base 프로젝트 개발 시 내용 정리의 필요성을 느낀 것들 (0) | 2023.10.03 |
[Android][Compose][삽질 교훈] Compose Migration + Expandable List (0) | 2023.02.23 |
[Kotlin] Calendar extensions (0) | 2023.01.12 |