我的问题是“有没有办法保存活动状态,可以在应用程序重启时使用。”
在我的应用程序中,我已经覆盖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);
}
我也知道如果我使用外部或本地存储,这个问题已经解决了。 我想知道我可以在不使用文件或数据库的情况下保持应用程序状态。
答案 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);
}
当我按下后退按钮并重新启动应用程序时,我的应用程序状态已恢复。 但我认为当我重新启动设备时无法恢复此状态。
我是否需要将状态存储在文件中?