마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

SharedPreferences 사용 시 데이터를 읽어오지 못하는 문제 문의

0 추천
안녕하세요. 안드로이드 어플 개발 중 궁금한 사항이 있어 질문 드립니다.

* 현상

* 먼저 SharedPreferences에 LoginType과 LoginState 값이 들어있는 상태입니다.

Push 수신 시 LoginType과 LoginState 값을 가져와서 처리를 하려고 하는데, 둘중 하나의 값만 출력되고 다른 하나의 값은 0이 리턴이 되고 있는 상태입니다.

저 두개의 값은 앱 실행 시 로그인이 완료되면 값을 저장하도록 되어 있습니다.

테스트 시에는 정상동작하지만 사용 중 가끔 문제가 발생합니다.

우선 값을 읽고 쓸때 모드는 MODE_PRIVATE 을 사용합니다.

어플 실행 시 getSharedPreferences 리턴 값을 static 변수에 넣고 메인 엑티비티와 GCMBaseIntentService 에서 같은 변수로 사용하고 있습니다.

질문1: MODE_PRIVATE 를 사용할 때 context에 따라 Read/Write 시 누락되거나 엎어지는 경우가 있나요? 그렇다면 Push 수신 시 IntentService에서 새로 getSharedPreferences으로 값을 받아 처리를 해야하는 건가요?

질문2: Preferences 값을 저장하기 위해 static 변수에 SharedPreferences 값과 Editor 값을 저장 후, 다른 엑티비티에서 이 변수를 가져다 쓰는 방식이 옳은 방식인가요?

 

설명이 제대로 되었을지 모르겠네요 ㅡㅡ;;

고수님들 혹 이런 현상을 보신적이 있으신지요?

조언 부탁드릴게요..
푸리니페른 (310 포인트) 님이 2016년 1월 22일 질문

2개의 답변

+1 추천
 
채택된 답변
질문1 : 컨텍스트에 따라 값이 누락되거나 하진 않습니다.

프리퍼런스는 주어진 컨텍스트의 패키지명을 기반으로 단말에 xml 형태로 데이터를 저장하게됩니다.

 

질문2 : Read의 경우 별 상관없지만 Write의 경우 커밋을 잘 해주셔야 합니다.

또 어떤 클래스에 static 으로 보관을 하시는지 모르겠지만...

그렇게 사용하시는 경우 해당 클래스가 GC 대상이되어 초기화되는 경우가 발생할수도 있습니다.

그닥 좋은 구조는 아니라고 생각됩니다.
비애천사 (12,080 포인트) 님이 2016년 1월 22일 답변
푸리니페른님이 2016년 1월 22일 채택됨
+1 추천
getSharedPreferences 리턴값을 static 변수에 저장하지 마세요.

각 Activity, Receiver, Service 등에서 필요한 경우 SharedPreference를 얻어서 쓰고 변경사항은 즉시 저장하도록 수정하세요.
익명사용자 님이 2016년 1월 22일 답변
...