ฉันรู้ว่านี่เป็นคำถามเก่า แต่ฉันต้องการแบ่งปันแนวทางของฉัน ฉันอ่านหนังสือมานานและใช้การตั้งค่าร่วมกันและคลาสแอปพลิเคชันส่วนกลาง:
ใบสมัครคลาส:
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 (สิ่งนี้) -> สิ่งนี้จะอ่านค่ากำหนดของคุณตั้งค่าวัตถุตัวกรองในคลาสแอปพลิเคชันของคุณและส่งคืน
- เมื่อคุณเรียกใช้ฟังก์ชัน getLocalPreferences () อีกครั้งที่อื่นในแอปพลิเคชันขั้นแรกให้ตรวจสอบว่าไม่มีในคลาสแอปพลิเคชันซึ่งเร็วกว่ามาก
หมายเหตุ: ตรวจสอบเสมอว่าตัวแปรกว้างของแอปพลิเคชันแตกต่างจาก NULL หรือไม่เหตุผล -> http://www.developerphil.com/dont-store-data-in-the-application-object/
วัตถุแอปพลิเคชันจะไม่อยู่ในหน่วยความจำตลอดไปมันจะถูกฆ่า ตรงกันข้ามกับความเชื่อที่เป็นที่นิยมแอปจะไม่เริ่มต้นใหม่ตั้งแต่ต้น Android จะสร้างวัตถุแอปพลิเคชันใหม่และเริ่มกิจกรรมที่ผู้ใช้อยู่มาก่อนเพื่อให้ภาพลวงตาว่าแอปพลิเคชันไม่เคยถูกฆ่าตั้งแต่แรก
หากฉันไม่ได้ตรวจสอบค่าว่างฉันจะอนุญาตให้โยน nullpointer เมื่อเรียกเช่น getMaxDistance () บนวัตถุตัวกรอง (หากวัตถุแอปพลิเคชันถูกปัดจากหน่วยความจำโดย Android)