본문 바로가기

곳간에서 인심난다/실무

[Android][DataStore] DataStore 동기적으로 쓰기

참고

https://developer.android.com/topic/libraries/architecture/datastore#synchronous

 

 

목표

DataStore의 저장 값을 suspend fun 바깥에서 불러오고 싶었다.

(이건 결국엔 DataStore를 동기적으로 쓰고 싶다는 의미라서 제목을 그렇게 넣었다)

 

기존

runBlocking을 써서 DataStore의 값을 가져오기는 했었다.

그러나 runBlocking이 UI thread를 block하는 거라 ANR 발생 가능성이 있다고 하니까, 공식문서를 살펴본다.

 

공식 문서 확인

안드로이드 공식 문서에서 동기적으로 이렇게 쓸 수는 있지만 ANR의 발생 가능성을 분명히 알려주고 있다.

여기보면 DataStore로부터 데이터를 프리로딩하면 ANR 이슈를 줄일 수는 있다고 한다.

DataStore 값 읽기를 비동기적으로 먼저 수행하면 값이 캐시로 저장된다고 한다.

결과

공식 문서에서 알려주는 방법

1. runBlocking을 써라.

2. runBlocking을 쓰면서 일어날 수 있는 UI 관련 사이드이펙트 이슈를 줄이기 위해 DataStore 읽기를 비동기적으로 미리 진행해서 캐시 메모리게 값을 저장시켜라.

 

🤔

DataStore를 동기적으로 쓰는 방법에 대해서는 아쉬움을 느낀다. UI 쓰레드를 막으면서 발생할 이슈에 대해서 가능성만 줄이는 거라, 불안정한 솔루션이라 생각된다. runBlocking와 DataStore를 같이 쓰는 방법(동기 코드로 쓰기)을 최대한 줄이는 쪽을 추구하며 작업해야 하지 않을까 싶었다.