Tag Archives: Sharedpreferences

Activity와 Service 혹은 두 개의 프로세스에서 SharedPreferences 값 공유하기

Gingerbread (Android 2.3)  이전 버전에서는 SharedPreferences에 저장된 값을 여러 프로세스나 Activity와 Service 사이에서 사용할 수 있었습니다.  예를 들어 PreferenceActivity에서 변경한 값을 바로 Service 프로세스에서 가져와 사용할 수가 있었죠.  하지만 최근 안드로이드 버전 (Gingerbread 이 후)에서는 명시적으로 설정하지 않는 한 같은 방식으로 사용할 수가 없습니다.   하나의 프로세스에서 SharedPreferences의 값을 변경해도 계속 이전 값만을 불러오게 됩니다.

이 문제를 해결하려면, 변경된 값을 불러오는 프로세스에서 SharedPreferences를 새로 로딩할 때 아래와 같이 설정해줘야 합니다.  이 문제를 해결하는데 며칠을 구글링했네요….  ㅠㅜ  동일한 문제를 겪고 계신 개발자분들에게 도움이 되었으면 좋겠습니다.

SharedPreferences myPrefs 
  = context.getSharedPreferences("myPrefs", Context.MODE_MULTI_PROCESS);

PreferenceActivity에서 사용자 지정 SharedPreferences 사용하기

안드로이드 개발자라면 PreferenceActivity가 얼마나 편리한지 다들 알고 계시리라 생각합니다.  PreferenceActivity (HONEYCOMB 이상은 PreferenceFragment) 에는 컨텍스트의 기본 SharedPreferences가 제공되는데, 가끔은 다른 이름이나 다른 모드로 사용해야 할 때가 있습니다.

이럴 경우 사용하는 방법이 있습니다.  PreferenceActivity에 직접적으로 특정 SharedPreferences를 지정할 수 있는 방법이 없기 때문에, 아래와 같은 코드를 사용하면 됩니다:

public class MyPreferencesActivity extends PreferenceActivity {
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    PreferenceManager prefMgr = getPreferenceManager();
    prefMgr.setSharedPreferencesName("my_preferences");
    prefMgr.setSharedPreferencesMode(MODE_WORLD_READABLE);

    addPreferencesFromResource(R.xml.preferences);
  }
}

DDMS File Explorer를 사용해서 SharedPrefereces 이름을 확인해 보시기 바랍니다.