3
在我的應用程序中,我擴展了應用程序類以維護與已驗證用戶相關的信息。但是,經過一些我不允許後臺進程的測試後,打開另一個應用程序(從而殺死我的),然後重新打開我的程序,我注意到這個狀態丟失了(變量返回到默認值)。我意識到Application類除了onCreate之外沒有任何生命週期回調,就像我認爲優雅的解決方案那樣的Activities do。所以我決定將這些信息寫入SharedPreference,以便在需要時可以恢復。這是正確的解決方案,還是有更優雅的解決方案?參考更優雅的方式來恢復Android應用程序子類的狀態?
相關示例代碼:
public class ApplicationUser extends Application {
private static final String PREF_KEY_USER = "prefKeyUser";
private static final String PREF_KEY_ID = "prefKeyID";
private static final String PREF_KEY_FIRST_NAME = "prefKeyFirstName";
private static final String PREF_KEY_LAST_NAME = "prefKeyLastName";
private static final String PREF_KEY_EMAIL = "prefKeyEmail";
private User mUser;
private SharedPreferences mSharedPreferences;
@Override
public void onCreate() {
super.onCreate();
mSharedPreferences = getSharedPreferences(PREF_KEY_USER,MODE_PRIVATE);
}
/**
*
* @return the user
*/
public User getUser() {
if (mUser == null) {
int id = mSharedPreferences.getInt(PREF_KEY_ID, -1);
String firstName = mSharedPreferences.getString(PREF_KEY_FIRST_NAME, "");
String lastName = mSharedPreferences.getString(PREF_KEY_LAST_NAME, "");
String email = mSharedPreferences.getString(PREF_KEY_EMAIL, "");
mUser = new User(id, firstName, lastName, email);
}
return mUser;
}
/**
* sets user, writing to shared preferences as well
* @param user
*/
public void setUser(User user) {
mUser = user;
Editor e = mSharedPreferences.edit();
e.putInt(PREF_KEY_ID, user.getID());
e.putString(PREF_KEY_FIRST_NAME, user.getFirstName());
e.putString(PREF_KEY_LAST_NAME, user.getLastName());
e.putString(PREF_KEY_EMAIL, user.getEmail());
e.commit();
}
}
我使用與您相同的方法。我使用SharePreferences來保存「全局」數據,即使Android殺死我的應用程序,這些數據也會存在。 – EJK