cja*_*m13 12 xml android sharedpreferences android-lifecycle onrestoreinstancestate
我试图弄清楚何时使用已保存的实例状态与从共享首选项文件加载信息.我有两个我希望保存的变量,时间和分数.我想确保如果用户返回到游戏屏幕,他们的分数和时间被保存和恢复,无论它是来自onPause状态还是onStop.
我有三个键:
public static final String ARG_SCORE = "score";
public static final String ARG_TIME = "time";
public static final String SHARED_PREFS = "shared_preferences";
Run Code Online (Sandbox Code Playgroud)
如果游戏暂停并显示一个对话框,那么当用户返回时我应该这样做
public void onRestoreInstanceState(Bundle savedInstanceState){
int score = savedInstanceState.getInt(ARG_SCORE);
}
Run Code Online (Sandbox Code Playgroud)
或者我应该这样做:
protected void onResume(){
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
int score = sharedPref.getInt(getString(R.string.saved_high_score));
}
Run Code Online (Sandbox Code Playgroud)
总的来说,我需要帮助了解生命周期以及何时存储重要信息,例如游戏的时间和分数.我只需要避免用户在无法完成游戏的情况下重新启动.
最后,我假设sharedPrefs保存到xml文件.它是否正确?有没有人有一个样本xml我的sharedPrefs应该如何出现?保存到savedInstanceState包中的密钥是否也存储在xml文件中?如果是这样,任何例子?如果没有,信息存储在哪里?
谢谢!
编辑:
好的酷豆.谢谢!还有一个问题,当为存储在sharedPreferences中的键值对定义键时,例如
public static final String ARG_SCORE = "score";
Run Code Online (Sandbox Code Playgroud)
为什么存储"得分"字符串?什么时候会被使用?我总是使用类似的东西在key_value对中放置一个值
args.putInt(ARG_TIMER, timerINT);
Run Code Online (Sandbox Code Playgroud)
并使用
scoreINT=savedInstanceState.getInt(ARG_SCORE);
Run Code Online (Sandbox Code Playgroud)
为什么键ARG_SCORE需要名称?我什么时候需要这个名字?是否必须保持String类型?
Waq*_*med 11
使用saveInstanceState
时,你经常来回移动之间activities
和使用SharedPreferences
时要确保信息的很长一段时间,并存储在一个是sharedpreferences xml
文件.你可以DDMS
在eclipse中查看.
记住,在saveInstanceState中,当你关闭应用程序意味着它从内存中删除时,信息也会丢失.在SharedPreferences中,如果您关闭应用程序,信息将保留在那里.