[Android] SharedPrefrences

1 분 소요

 Shared Prefrences 객체 개념

->앱 내부에 파일을 하나 만들어서 이 파일 안에서 데이터를 저장하거나 읽어옴

앱의 데이터 디렉토리(/data/data/package명) 아래에 "shared_prefs" 에 생성되며 이름에 ".xml" 이 붙은 파일이 생성됨


-> 주로 설정 정보, 자동로그인 기능 구현시에 사용

-> 상태저장, 복구 시에는 생명주기에서 onPause()에 저장, onResume()에 불러오기 형태로 사용


Prefrences 객체 얻어오는 방법

1.모든 액티비티가 공유하는 Prefrences

-> Context의 getSharedPrefrences(String frefrencesName, int mode)

shared_prefs/prefrenceName.xml 형태로 xml 파일이 생성됨




2.각 Activity 의 이름으로 각 Activity의 정보를 저장하는 SharedPrefrences

(Activity 의 클래스 full name으로 생성됨)

-> Activity 클래스의 getPrefrences()

Activity class의 fullname.xml 형태로 파일이 생성됨




3. PropertyManger 클래스 사용 (주로 앱 설정화면 만들때 사용. Singleton 으로 구현)

(앱의 Package명 + "_prefrences" 라는 이름으로 생성됨)

-> PropertyManager 클래스의 getDefaultPrefrences(Context context)

앱의 Packagename_prefrences.xml 형태로 파일이 생성됨




ProfertyManager

-Activity 에서 SharedPrefrences 객체를 생성하여 사용하면, 다른 Activity에서도 동일한 객체를 재생성해야되고, 파일로부터 값을 읽어와서 유지해야되는등 낭비가 발생하게됨

-이 문제를 해결하기 위해 Singleton 으로 된, 단 하나의 ProfertyManager 클래스를 생성하여 전 Activity 에서 SharedPrefrences 객체를 공유함

-ProfertyManager는 Context를 흭득하여 Context를 SharedPrefrences 객체를 얻어와야됨

-Aplication 을 상속받아, Aplication 객체의 context를 가져와서 임의의 곳에서 Prefrence 객체를 사용할수 있게 해야됨

-ProfertyManager 클래스 내에서 Profrence 읽기 쓰기 메소드를 따로 작성해서 Prefrence 읽기 쓰기 기능 전용클래스로 사용함.

-예시로 다른 Acitivty 에서 값을 읽거나 쓸때는 ProfertyManager.getInstance().읽기메소드() / ProfertyManager.getInstance().쓰기메소드() 형태로 사용함.




앱의 설정 화면 만들때, 주로 쓰는 패턴은

PropertyManager 클래스를 따로 만들고 (Singleton 으로 구현)

Activity A / Activity B 등등에서 접근해서 SharedPrefrences를 사용함




안드로이드는 SharedPrefrences를 이용한 설정화면을 만드는 메커니즘을 지원함

-PrefrenceActivity

-PrefrenceFragment


-> 값을 저장할때는 SharedPrefrences.edit() 메소드로 Editor객체 값을 얻어와서 

Editor객체 사용해서 값을 저장


->변경된 값을 파일에 저장할때는 Editor 객체.commit() 으로 파일에 영구 저장




SharedPrefrences 사용방법

---------------------------------------------------

저장

1. SharedPrefrences 객체 생성

2. SharedPrefrences.Editor 객체 생성

3. Editor.put*** 메소드로 정보 저장

4. Editor.commit 메소드로 실행

--------------------------------------------

읽어오기

1. getSharedPrefrences로 객체 얻어옴

2. 객체가 null 이 아니고, 객체.contains 메소드로 자료있는지 조건문으로 확인

3. 객체.get*** 으로 정보 읽어옴

---------------------------------------------------

초기화

1.getSharedPrefrences로 객체 얻어옴

2.Editor 객체 생성

3.Editor.clear()

4.Editor.commit()

--------------------------------------------------

Prefrence 값이 변경됬을때 호출 콜백 메소드 (SharedPrefrences 객체)

registerOnSharedPrefrencesChangeListener

-Prefrence 값이 변경되면 알려줄 리스너를 등록


unregisterOnSharedPrefrencesChangeListener

-리스너 제거