2015년 9월 14일 월요일

SharedPreferences 에서 commit 과 apply 의 차이



 안드로이드 스튜디오는 apply 를 쓰라고 해당 코드에 마킹을 해서

 뭔 차이가 있나 찾아봤다.


 일단 commit 는 (저장이) 성공하면 boolean타입인 true 값을 반환

 apply 는 반환값이 없다는게

 눈에 보이는 차이점이다.



 그러면 단순히 반환값이 있고/없고 인데... 왜 IDE 에서는 apply 를 추천할까.


 public abstract boolean commit ()   --  API 1

public abstract void apply ()  -- API 9


commit은 API 최초부터 있었던 것이고 apply는 9버젼(2.3)에서 부터 지원했다.

기존에 있던것을 뭔가 보안했기 때문에 새롭게 나온것이다.


눈에 보이지 않는 차이점은 동기/비동기 였던 것이다.

저장공간과 지속적인 동기를 통해 preference 를 작성하던 commit 과 달리

apply는 비동기적으로 반영이 된다는 것이다.
(이는 실패시 어떤 알림을 받을 수 없다는 문제점도 있긴하다)


commit의 동기는 여러분의 method 를 block 하고 write 하기때문에

apply 보다 필연적으로 느릴 수 밖에 없다.

(그렇기 때문에 IDE 는 apply 를 추천(고려)하나보다...)



commit 을 쓰던걸 apply 를 쓰면 저장 속도가 약 10 ~ 30배 까지 빨라진다고 하니

장단점이 있나보다.




댓글 2개: