Android 在onPause()和onDestroy()方法中保存SharedReference之间的区别

Android 在onPause()和onDestroy()方法中保存SharedReference之间的区别,android,Android,我试图保存一个int变量int diff,但我不确定应该将其保存在哪里,保存在onPause()或onDestroy()方法中。此变量用于静态附加到MainActivity的片段中 代码是基本的: @Override public void onDestroy() { super.onDestroy(); SharedPreferences sp = this.getActivity().getSharedPreferences("myPrefsName",Context.MOD

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

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

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


只有在调用finish()或android终止您的活动时,OnDestroy才会保存变量。

不能保证会调用
OnDestroy
;一旦一个活动被移动到后台,如果需要系统资源,即使不调用
onDestroy
,也会被杀死。因此,您应该在暂停时保存
onPause
。注意,对于与活动的特定实例关联的状态,
onSaveInstanceState
onRestoreInstanceState
可能更合适;但是,
onResume
/
onPause
对于共享pref这样的全局状态是有意义的。

我建议您将其置于pause()上,因为如果您想在其他活动中使用它,则不会保存该值,因为在退出应用程序之前将调用onDestroy()方法,而不是onPause()方法方法将在其他活动开始时调用

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

OnDestroy不能被调用。看

也可从文件中获得:

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