2016-09-07 12 views
0

저는 Android를 배우려고 노력하는 iOS 개발자이며 모범 사례를 따르고 있습니다.모든 활동에서 볼 수 있도록 맞춤 개체를 저장할 수있는 최적의 장소

1 -> m 액티비티가 액세스 할 수 있어야하는 사용자 지정 개체가 있으며 응용 프로그램을 닫을 때 저장해야합니다. 현재 SharedPreferences, 아래 코드를 사용하여 저장하고 있지만 최상의 경로인지 확실하지 않습니다. 싱글 톤을 사용해야합니까? 더 좋은 방법이 있습니까?

SharedPreferences mPrefs = getPreferences(MODE_PRIVATE); 
Editor prefsEditor = mPrefs.edit(); 
Gson gson = new Gson(); 
String json = gson.toJson(userProfile); 
prefsEditor.putString("UserProfile", json); 
prefsEditor.commit(); 

gson = new Gson(); 
json = mPrefs.getString("UserProfile", ""); 
UserProfileObject outObject = gson.fromJson(json, UserProfileObject.class); 

답변

2

응용 프로그램이 종료 될 때 싱글 톤이 저장되지 않습니다. 실제로 옵션은 다음과 같습니다 :

* SharedPreferences. 소수의 키/값 쌍에 적합

* 데이터베이스. 관계형 데이터에 유용합니다.

* 선호하는 포맷으로 디스크에 파일을 만듭니다. 어떤 양의 데이터에도 적합하지만 사용자 정의 파서를 작성해야 할 수도 있습니다.

공유 환경 설정에서 json을 저장하는 것은 다소 이상합니다. 그곳에 많은 키를 저장하지 않는 한 그렇게 끔찍하지는 않지만 파일을 쓰는 방법을 모르는 것처럼 보입니다.

+0

나는 안드로이드 개발 학습을 통해 내 방식을 찾고있다. 나는 파일을 쓰는 방법을 알아낼 수있다. 고맙습니다 – user1079052

0

@Gabe는 좋은 대답을 제공합니다. 나는 그것에 2 센트를 더한다.

나는 개인적으로 SharedPreferences에 직렬화 된 데이터를 저장하고 싶지 않다. 대신 SQLite 또는 Realm과 같은 로컬 db 저장소를 사용하여 저장소에 저장합니다. 직렬화/직렬화가되는 이유는 리플렉션을 사용하여 객체를 마샬링/언 마샬링 (marshalling/unmarshalling)하여 잠재적으로 부정적인 방식으로 성능을 저하시킬 수 있기 때문입니다. 한마디로

, 당신의 UserProfileObject 쉽게 JSON 구성 될 수 있으며 어떤 중요한 데이터를 포함하지 않는 경우 간단한 데이터

내가 생각
0

를 저장하는 복잡한/관계형 데이터와 된 SharedPreferences를 저장하기위한 용도 지역 데시벨 (예 : 암호) , 괜찮아요 그냥 SharedPreferences (단지 당신이 뭘하고있는 것처럼 json 문자열을 저장하는 데) 수도 있습니다.

싱글 세션 SessionManager/ProfileManager 클래스를 사용하면 충분합니다. 비록 그것이 1 -> m 활동에 의해 사용될지라도, 싱글 톤을 사용하면 SharedPreferences에 한 번 닿을 것입니다. 변경 사항이있을 때 싱글 톤 및 SharedPreferences의 데이터 복사본을 동기화 상태로 유지하십시오. 또는 싱글 톤을 모두 함께 덤프하고 SharedPreferences을 필요할 때마다 (동기화를 유지하는 것에 대한 걱정은 덜합니다) 유스 케이스가 그렇게 많이 망칠 것이라고 생각하지 마십시오.