保存onPause()和onDestroy()方法中的SharedPreferences之间的区别

时间:2014-12-28 22:46:50

标签: android

我正在尝试保存一个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);
}

4 个答案:

答案 0 :(得分:8)

无法保证onDestroy将被召唤;一旦活动被移动到后台,即使没有调用onDestroy,如果需要系统资源也是公平的游戏。因此,您应该保存在onPause中。请注意,对于与特定活动实例相关联的州,onSaveInstanceStateonRestoreInstanceState可能更合适;但是,onResume / onPause对共享首选项等全局状态有意义。

答案 1 :(得分:2)

我建议你把它放在onPause()上,因为如果你想在另一个活动上使用它,那么就不会保存这个值,因为在退出app之前会调用onDestroy()方法但是会调用onPause()方法当其他活动开始时

答案 2 :(得分:2)

您应该将其保存在onPause()。

可能无法调用OnDestroy。见documentation

同样来自文档:

  

onPause()通常用于提交未保存的持久数据更改,停止动画和其他可能消耗CPU的内容,等等

source

答案 3 :(得分:0)

这实际上取决于你使用变量的时间和时间。

保存int onPause几乎可以保证一旦您的活动以任何方式被隐藏,它就会被保存。 (用户离开应用程序,显示对话框等。)

OnDestroy只会在你调用finish()或android杀死你的活动时保存你的变量。