나는 이것이 오래된 질문이라는 것을 알고 있지만 내 접근 방식을 공유하고 싶습니다. 독서 시간이 길었고 공유 된 선호도와 글로벌 애플리케이션 클래스의 조합을 사용했습니다.
ApplicationClass :
public class ApplicationClass extends Application {
private LocalPreference.Filter filter;
public LocalPreference.Filter getFilter() {
return filter;
}
public void setFilter(LocalPreference.Filter filter) {
this.filter = filter;
}
}
LocalPreference :
public class LocalPreference {
public static void saveLocalPreferences(Activity activity, int maxDistance, int minAge,
int maxAge, boolean showMale, boolean showFemale) {
Filter filter = new Filter();
filter.setMaxDistance(maxDistance);
filter.setMinAge(minAge);
filter.setMaxAge(maxAge);
filter.setShowMale(showMale);
filter.setShowFemale(showFemale);
BabysitApplication babysitApplication = (BabysitApplication) activity.getApplication();
babysitApplication.setFilter(filter);
SecurePreferences securePreferences = new SecurePreferences(activity.getApplicationContext());
securePreferences.edit().putInt(Preference.FILER_MAX_DISTANCE.toString(), maxDistance).apply();
securePreferences.edit().putInt(Preference.FILER_MIN_AGE.toString(), minAge).apply();
securePreferences.edit().putInt(Preference.FILER_MAX_AGE.toString(), maxAge).apply();
securePreferences.edit().putBoolean(Preference.FILER_SHOW_MALE.toString(), showMale).apply();
securePreferences.edit().putBoolean(Preference.FILER_SHOW_FEMALE.toString(), showFemale).apply();
}
public static Filter getLocalPreferences(Activity activity) {
BabysitApplication babysitApplication = (BabysitApplication) activity.getApplication();
Filter applicationFilter = babysitApplication.getFilter();
if (applicationFilter != null) {
return applicationFilter;
} else {
Filter filter = new Filter();
SecurePreferences securePreferences = new SecurePreferences(activity.getApplicationContext());
filter.setMaxDistance(securePreferences.getInt(Preference.FILER_MAX_DISTANCE.toString(), 20));
filter.setMinAge(securePreferences.getInt(Preference.FILER_MIN_AGE.toString(), 15));
filter.setMaxAge(securePreferences.getInt(Preference.FILER_MAX_AGE.toString(), 50));
filter.setShowMale(securePreferences.getBoolean(Preference.FILER_SHOW_MALE.toString(), true));
filter.setShowFemale(securePreferences.getBoolean(Preference.FILER_SHOW_FEMALE.toString(), true));
babysitApplication.setFilter(filter);
return filter;
}
}
public static class Filter {
private int maxDistance;
private int minAge;
private int maxAge;
private boolean showMale;
private boolean showFemale;
public int getMaxDistance() {
return maxDistance;
}
public void setMaxDistance(int maxDistance) {
this.maxDistance = maxDistance;
}
public int getMinAge() {
return minAge;
}
public void setMinAge(int minAge) {
this.minAge = minAge;
}
public int getMaxAge() {
return maxAge;
}
public void setMaxAge(int maxAge) {
this.maxAge = maxAge;
}
public boolean isShowMale() {
return showMale;
}
public void setShowMale(boolean showMale) {
this.showMale = showMale;
}
public boolean isShowFemale() {
return showFemale;
}
public void setShowFemale(boolean showFemale) {
this.showFemale = showFemale;
}
}
}
MainActivity (애플리케이션에서 먼저 호출되는 활동) :
LocalPreference.getLocalPreferences(this);
설명 된 단계 :
- 메인 액티비티는 getLocalPreferences (this)를 호출합니다.-> 이것은 여러분의 환경 설정을 읽고, 여러분의 애플리케이션 클래스에 필터 객체를 설정하고 그것을 반환합니다.
- 응용 프로그램의 다른 곳에서 getLocalPreferences () 함수를 다시 호출하면 먼저 훨씬 빠른 응용 프로그램 클래스에서 사용할 수 없는지 확인합니다.
참고 : 응용 프로그램 전체 변수가 NULL과 다른지 항상 확인하십시오. 이유-> http://www.developerphil.com/dont-store-data-in-the-application-object/
응용 프로그램 개체는 메모리에 영원히 남아 있지 않으며 종료됩니다. 대중의 믿음과는 달리 앱이 처음부터 다시 시작되지 않습니다. Android는 새로운 Application 개체를 만들고 사용자가 이전에 있었던 활동을 시작하여 애플리케이션이 애초에 죽지 않았다는 착각을줍니다.
null을 확인하지 않으면 필터 개체에서 getMaxDistance ()를 호출 할 때 nullpointer가 throw되도록 허용합니다 (응용 프로그램 개체가 Android에 의해 메모리에서 스 와이프 된 경우).