2016-09-07 2 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을 필요할 때마다 (동기화를 유지하는 것에 대한 걱정은 덜합니다) 유스 케이스가 그렇게 많이 망칠 것이라고 생각하지 마십시오.

관련 문제