[Android] SharedPreference commit(), apply()

2025. 1. 22. 09:50프로그래밍/Android

개요

앱에서 중요한 요청을 실패할 경우 EncryptedSharedPreference를 사용해 정보를 저장하고 있다가 재요청을 날려야 하는 부분이 있었다.
내가 원하는 부분인 onResumse 단계에서는 asynchronously한 동작과 함께 매핑된 데이터와 관련된 요청을 잘 수행하였다.

그러나 문제는 sharedPreference객체의 edit 메서드 직후에 앱 자체를 crash를 발생시킬 경우였다.

분명 Editor 클래스의 .edit()은 수행됐으나 SharedPreference에 저장되지 않는 것에 의문이 들어 찾아보니 commit과 apply의 차이에서 발생하는 문제였다.

 

 

해결

요약하자면 commit은 디스크에 동기적으로 File write를 수행하나 main thread에서 사용할 경우 UI 렌더링이 멈출 수 있다고 한다. 

 

apply는 in memory 방식으로 비동기적으로 File write를 처리한다. 

 

일반적인 경우 apply를 사용하는 편이 당연히 효율적이지만 나의 케이스에는 중요한 정보를 일단 쓰는 것이 중요하고 해당 부분에서는 UI가 일시적으로 멈추어도 UX를 해치는 타이밍이 아니라고 판단되어 최종적으로 기 apply 대신 commit으로 변경했다.

 

출처 : https://developer.android.com/training/data-storage/shared-preferences?hl=en

          https://developer.android.com/reference/android/content/SharedPreferences