[Android] SharedPreference 값 변화 관찰

명준쓰·2024년 2월 5일
0

안녕하세요,
Android에서 값을 저장하는데 사용하는 SharedPreference 를 통해 동적으로 변화하는 값을 관찰하는 방법에 대해 작성해보겠습니다.

목표 -> SettingFragment에서 특정 값이 변경되면 MainActivity의 UI의 변화

이슈 -> MainActivity의 FragmentContainer에 하위 프래그먼트들이 종속(OneActivity - MultiFragment 구조) 되어 있기 때문에 생명주기를 이용한 데이터 전달 방법으로는 실시간 반영이 힘듬.

해결 방안 ->

  1. Interface를 사용한 콜백 방식
  1. ViewModel과 LiveData
  1. Event Bus 사용
  1. Local Broadcast Receiver
  1. Shared Preferences와 OnSharedPreferenceChangeListener

이렇게 5가지 정도의 해결 방안들을 파악했고,
설정에 관련된 정보는 device내에 저장을 하는 경우가 많기 때문에 5번 방식으로 포스팅 해보겠습니다.

  1. Shared Preferences를 클래스를 만들어 필요한 데이터를 저장할 수 있도록 준비합니다.

  2. 저장해야되는 데이터에 Shared Preferences를 사용해 데이터를 저장합니다.

  3. 데이터를 사용해야하는 곳에서 OnSharedPreferenceChangeListener 해당 함수를 사용해 데이터가 변할때마다 반응하는 리스너를 등록합니다.

    private SharedPreferences.OnSharedPreferenceChangeListener preferenceChangeListener;


    private void setupSharedPreferencesListener() {
        preferenceChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
            @Override
            public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
                if (SettingPreference.On_Off.equals(key)) {
                    updateUIBasedOn();
                }
            }
        };
        settingPreference.getSharedPreferences().registerOnSharedPreferenceChangeListener(preferenceChangeListener);
    }


 @Override
    protected void onDestroy() {
        super.onDestroy();
        settingPreference.getSharedPreferences().unregisterOnSharedPreferenceChangeListener(preferenceChangeListener);
        appFinish();
    }

간략하게 이러한 순서로 이루어지고 Android에서 기본 설정이 변경될 때 호출할 콜백을 제공해주기 때문에 쉽게 구현이 가능합니다.

이 방식을 사용하면 Fragment와 Activity간의 직접적인 연결이 커뮤니케이션 없이 상태 변경을 관리할 수 있는 장점이 있습니다.

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

profile
개린이

0개의 댓글