更优雅的方式来恢复Android Application子类的状态?

时间:2013-01-07 02:10:19

标签: android

在我的应用程序中,我扩展了应用程序类以维护与经过身份验证的用户相关的信息。但是,在经历了一些我不允许后台进程的测试之后,打开另一个应用程序(从而杀死我的)并重新打开我,我注意到这个状态丢失了(变量返回到它们的默认值)。我意识到Application类除了onCreate之外没有任何生命周期回调,就像活动一样,我认为这是优雅的解决方案。所以我决定将这些信息写入SharedPreference,以便在需要时可以恢复它。这是正确的解决方案,还是更优雅?

相关的示例代码供参考:

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 个答案:

答案 0 :(得分:0)

看起来我的方式是正确的方式,所以我只是将其添加为答案。如果这是不正确的程序,请纠正我。