我正在尝试保存一个int变量int diff
,我不知道应该在onPause()或onDestroy()方法中保存它。此变量用于片段,静态附加到MainActivity。
代码是基本的:
@Override
public void onDestroy() {
super.onDestroy();
SharedPreferences sp = this.getActivity().getSharedPreferences("myPrefsName",Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putInt("myPrefsInt",diff);
editor.commit();
}
并且要检索它:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SharedPreferences sp = this.getActivity().getSharedPreferences("myPrefsName", Context.MODE_PRIVATE);
diff = sp.getInt("myPrefsInt",1);
}
答案 0 :(得分:8)
无法保证onDestroy
将被召唤;一旦活动被移动到后台,即使没有调用onDestroy
,如果需要系统资源也是公平的游戏。因此,您应该保存在onPause
中。请注意,对于与特定活动实例相关联的州,onSaveInstanceState
和onRestoreInstanceState
可能更合适;但是,onResume
/ onPause
对共享首选项等全局状态有意义。
答案 1 :(得分:2)
我建议你把它放在onPause()上,因为如果你想在另一个活动上使用它,那么就不会保存这个值,因为在退出app之前会调用onDestroy()方法但是会调用onPause()方法当其他活动开始时
答案 2 :(得分:2)
您应该将其保存在onPause()。
可能无法调用OnDestroy。见documentation
同样来自文档:
onPause()通常用于提交未保存的持久数据更改,停止动画和其他可能消耗CPU的内容,等等
答案 3 :(得分:0)
这实际上取决于你使用变量的时间和时间。
保存int onPause几乎可以保证一旦您的活动以任何方式被隐藏,它就会被保存。 (用户离开应用程序,显示对话框等。)
OnDestroy只会在你调用finish()或android杀死你的活动时保存你的变量。