我可以在不使用Android的文件或数据库的情况下保持应用程序状态

时间:2016-02-21 08:21:09

标签: android sharedpreferences

我的问题是“有没有办法保存活动状态,可以在应用程序重启时使用。”

在我的应用程序中,我已经覆盖onSaveInstanceState和onRestoreInstanceState来保存和恢复我的实例状态。

我还使用SharedPreferences来保存状态。但是当我按下Back Buttaon并重新启动我的应用程序时,我发现SharedPreference已经很清楚了。

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);

    SharedPreferences pref = getSharedPreferences(MY_APP, MODE_PRIVATE);
    SharedPreferences.Editor editor = pref.edit();

    editor.putString(USER_NAME, name.getText().toString());
    editor.putInt(COUNT_STATE, count);

    editor.commit();
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);

    SharedPreferences pref = getSharedPreferences(MY_APP, MODE_PRIVATE);

    name.setText(pref.getString(USER_NAME, ""));
    count = pref.getInt(COUNT_STATE, 0);
}

我也知道如果我使用外部或本地存储,这个问题已经解决了。 我想知道我可以在不使用文件或数据库的情况下保持应用程序状态。

2 个答案:

答案 0 :(得分:1)

onBackPressed()您需要存储您的州 当活动创建onCreate()时,您需要恢复它

private void saveMyState(){
    SharedPreferences pref = getSharedPreferences(MY_APP, MODE_PRIVATE);
    SharedPreferences.Editor editor = pref.edit();

    editor.putString(USER_NAME, name.getText().toString());
    editor.putInt(COUNT_STATE, count);

    editor.commit();
}

private restoreMyState(){
    SharedPreferences pref = getSharedPreferences(MY_APP, MODE_PRIVATE);
    name.setText(pref.getString(USER_NAME, ""));
    count = pref.getInt(COUNT_STATE, 0);
}

@Override
public void onBackPressed() {
    saveMyState();
    super.onBackPressed();
}

@Override
public void onCreate(Bundle savedInstanceState){
    //init views, buttons, textViews (findViewById)...
    //do other works ...
    //:
    //:

    //then try to restore state (if saved)
    restoreMyState();
} 

如果您愿意,可以拨打同一个电话saveMyState()restoreMyState() 如果方向发生变化,则onSaveInstanceState()onRestoreInstanceState()

我认为这将涵盖您想要的所有案例。

PS:使用SharedPreferences会写入/读取文件,引擎,因此如果您使用SharedPreferences

,则表示您已在使用文件

答案 1 :(得分:0)

对于我的问题,我尝试通过覆盖onBackPressed来改变Pressed Back Button的行为。 在这个方法中,我写了moveToBackTask(true)。

@Override
public void onBackPressed() {
    moveTaskToBack(true);
}

当我按下后退按钮并重新启动应用程序时,我的应用程序状态已恢复。 但我认为当我重新启动设备时无法恢复此状态。

我是否需要将状态存储在文件中?