[Android] SharedPrefrences
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
-리스너 제거