我正在尝试弄清楚何时使用保存的实例状态,而何时从共享首选项文件中加载信息。我有两个变量需要保存,时间和分数。 我想确保如果用户返回游戏界面,则无论是从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文件中,这正确吗?是否有人有一个示例XML可以展示我的sharedPrefs应该如何出现?保存在savedInstanceState捆绑包中的键也会保存到XML文件中吗?如果是这样,有什么示例?如果不是,那么信息存储在哪里?
谢谢!
编辑:
好的,太棒了,谢谢!还有一个问题,当为存储在sharedPreferences中的键值对定义键时,例如:
public static final String ARG_SCORE = "score";
为什么要存储“score”字符串?这会在什么情况下被使用?我总是使用类似以下方式将值放入键值对中:
args.putInt(ARG_TIMER, timerINT);
并使用以下方式检索
scoreINT=savedInstanceState.getInt(ARG_SCORE);
为什么需要为键(key)ARG_SCORE指定一个名称?我何时需要使用这个名称?它必须保持为String类型吗?为什么需要为键(key)指定名称呢?这是因为在编程中,我们需要通过名称来引用特定的键(key),而不是根据其位置或索引。名称可以让代码更加易读且易于维护。
当您需要查找或修改与该键相关联的值时,您需要使用键的名称。如果你只是在创建一个简单的字符串映射表时,那么将其保持为String类型是没有问题的。但是,如果您需要将键关联到其他数据类型,则可以选择相应的类型来表示键的值。