2013-01-07 73 views
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(); 
    } 
} 
+1

我使用與您相同的方法。我使用SharePreferences來保存「全局」數據,即使Android殺死我的應用程序,這些數據也會存在。 – EJK

回答

0

好像我做的是正確的方式方法,所以我只是要添加爲回答。如果這是不正確的程序,請糾正我。

相關問題