Bunun eski bir soru olduğunu biliyorum ama yaklaşımımı paylaşmak istiyorum. Uzun okuma sürelerim vardı ve paylaşılan tercihler ile küresel uygulama sınıfının bir kombinasyonunu kullandım:
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 (uygulamanızda ilk çağrılan etkinlik):
LocalPreference.getLocalPreferences(this);
Açıklanan adımlar:
- Ana aktivite getLocalPreferences (this) -> çağırır bu, tercihlerinizi okuyacak, uygulama sınıfınızdaki filtre nesnesini ayarlayacak ve onu döndürecektir.
- GetLocalPreferences () işlevini uygulamada başka bir yerde tekrar çağırdığınızda, önce çok daha hızlı olan uygulama sınıfında bulunup bulunmadığını kontrol eder.
NOT: DAİMA bir uygulama geniş değişkeninin NULL'den farklı olup olmadığını kontrol edin, neden -> http://www.developerphil.com/dont-store-data-in-the-application-object/
Uygulama nesnesi sonsuza kadar bellekte kalmayacak, öldürülecektir. Yaygın inanışın aksine, uygulama sıfırdan yeniden başlatılmayacak. Android, yeni bir Uygulama nesnesi oluşturacak ve uygulamanın ilk etapta asla öldürülmediği yanılsamasını vermek için kullanıcının daha önce bulunduğu etkinliği başlatacaktır.
Boş değeri kontrol etmediysem, örneğin filtre nesnesinde getMaxDistance () çağırırken bir nullpointer atılmasına izin verirdim (uygulama nesnesi Android tarafından bellekten kaydırıldıysa)