Tôi biết đây là một câu hỏi cũ nhưng tôi muốn chia sẻ cách tiếp cận của mình. Tôi đã có thời gian đọc lâu dài và sử dụng kết hợp các sở thích được chia sẻ và lớp ứng dụng toàn cầu:
Lớp ứng dụng:
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 (hoạt động được gọi đầu tiên trong ứng dụng của bạn):
LocalPreference.getLocalPreferences(this);
Các bước giải thích:
- Hoạt động chính gọi getLocalPreferences (this) -> điều này sẽ đọc các tùy chọn của bạn, đặt đối tượng lọc trong lớp ứng dụng của bạn và trả về nó.
- Khi bạn gọi lại hàm getLocalPreferences () ở một nơi khác trong ứng dụng, trước tiên nó sẽ kiểm tra xem nó không có sẵn trong lớp ứng dụng, nhanh hơn rất nhiều.
LƯU Ý: LUÔN LUÔN kiểm tra xem biến rộng của ứng dụng có khác với NULL hay không, lý do -> http://www.developerphil.com/dont-store-data-in-the-application-object/
Đối tượng ứng dụng sẽ không ở trong bộ nhớ mãi mãi, nó sẽ bị giết. Trái với suy nghĩ của nhiều người, ứng dụng sẽ không được khởi động lại từ đầu. Android sẽ tạo một đối tượng Ứng dụng mới và bắt đầu hoạt động mà người dùng đã ở trước đó để tạo ảo giác rằng ứng dụng đó chưa bao giờ bị khai tử ngay từ đầu.
Nếu tôi không kiểm tra null, tôi sẽ cho phép ném nullpointer khi gọi ví dụ getMaxDistance () trên đối tượng bộ lọc (nếu đối tượng ứng dụng đã được xóa khỏi bộ nhớ bởi Android)