我试图弄清楚何时使用保存的实例状态与从共享首选项文件加载信息。我有两个变量要保存,时间和分数。我想确保如果用户返回游戏屏幕,无论是从 onPause 状态还是 onStop,他们的分数和时间都会被保存和恢复。
我有三把钥匙:
public static final String ARG_SCORE = "score";
public static final String ARG_TIME = "time";
public static final String SHARED_PREFS = "shared_preferences";
如果游戏暂停并显示一个对话框,当用户返回时我应该这样做
public void onRestoreInstanceState(Bundle savedInstanceState){
int score = savedInstanceState.getInt(ARG_SCORE);
}
还是我应该做类似的事情:
protected void onResume(){
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
int score = sharedPref.getInt(getString(R.string.saved_high_score));
}
总的来说,我需要帮助了解生命周期以及何时存储重要信息,例如游戏的时间和分数。我只需要避免用户在无法完成游戏的情况下必须重新启动。
最后,我假设 sharedPrefs 保存到一个 xml 文件。这个对吗?有没有人有我的 sharedPrefs 应该如何显示的示例 xml?保存到 savedInstanceState 包的键是否也存储在 xml 文件中?如果是这样,有什么例子吗?如果不是,信息存储在哪里?
谢谢!
编辑:
好的酷豆。谢谢!还有一个问题,当为存储在 sharedPreferences 中的键值对定义键时,例如
public static final String ARG_SCORE = "score";
为什么要存储“分数”字符串?什么时候会用到这个?我总是使用类似的东西将一个值放入 key_value 对
args.putInt(ARG_TIMER, timerINT);
并使用检索
scoreINT=savedInstanceState.getInt(ARG_SCORE);
为什么键 ARG_SCORE 需要一个名称?我什么时候需要名字?它必须保持类型字符串吗?