본문 바로가기
개발/Android

[Android] SharedPreference commit과 apply

by Dev Aaron 2020. 11. 8.
반응형

Android에서 사용자 설정 값이나 간단한 데이터를 저장하기 위해 SharedPreference를 사용합니다.
SharedPreference에 데이터를 저장할 때 마지막에 어떤 함수를 호출하시나요?

여기에 2 가지 옵션이 있습니다.

  1. commit()
  2. apply()

이 두 함수는 어떤 차이가 있고, 언제 무엇을 써야 할까요?

두 함수의 역할은 사실 동일합니다.
차이점은 return type에 있습니다.

boolean commit();
void apply();

 

commit 메서드는 데이터를 persistent storage에 저장하는 과정이 동기화되어 있고,
storage에 write를 한 결과(성공/실패)를 사용자에게 boolean으로 반환합니다.
단순히 commit을 호출하지만 그 내부 로직은 동기화되어 있기 때문에 Main thread에 block이 걸리게 되죠.

반면 apply 메서드는 내부적으로 비동기 방식으로 동작합니다.
우선 해당 값을 메모리에 캐시하고, background에서 스토리지에 데이터를 write하기 때문에,
apply 호출 직후 다시 읽더라도 캐시에서 올바른 값을 읽어올 수 있습니다.
비동기로 동작하기 때문에 결과를 반환해줄 수도 없죠.

좀더 자세한 설명은 하기 공식 문서를 참고하기 바랍니다.

https://developer.android.com/reference/android/content/SharedPreferences.Editor.html#apply()

반응형