SharedPreferences无法正常工作

时间:2013-05-01 12:19:27

标签: java android sharedpreferences

请参阅以下代码

@Override
protected void onStop() {
    super.onStop();
    SharedPreferences prefs = getSharedPreferences("screenPref", Context.MODE_PRIVATE);
    SharedPreferences.Editor edit = prefs.edit();
    edit.putString("active_screen", activeScreenText);

    if(edit.commit()){

        Log.i("APP", "SAVED!!"); // LOGCAT Always execute this piece of code

    }
}


// onCreate
SharedPreferences pref = getSharedPreferences("screenPref", Context.MODE_PRIVATE);
    activeScreen.setSummary(pref.getString("active_screen", "Never"));

当用户从ListPreference中选择一个选项时,该选项将保存在“activeScreenText”变量中。如果我重新启动应用程序(主页按钮,并导航回它),它的工作原理。加载字符串并设置此首选项的摘要。但是如果android杀了我的应用程序(或者如果我强行关闭它),那么这种改变并不是持久的。每当我的应用程序内存不足时,我就会得到“从不”,但相应的列表首选项保持相同的值。

(我在listpreference中有几个选项,我想设置摘要,当前选择哪个值。)

例如:

ListPreference: -决不 -Choice1 -Choice2 -Choice3

假设我选择了Choice3。 选择值时,摘要设置正确。如果我退出应用程序并再次重新启动它,它会加载perferct。如果我的应用程序被强制关闭或被Android杀死,那么仍然选择了Choice3,但我的汇总值是默认值(从不)。

我做错了什么?

3 个答案:

答案 0 :(得分:1)

在编辑后立即将您的值保存到sharedpreferences,而不是onStop()方法

答案 1 :(得分:1)

OnStop() 无法保证被调用。永远不要依赖它来保存重要数据。正如文件所说:

  

请注意,在内存不足的情况下,可能永远不会调用此方法   系统没有足够的内存来保持您的活动   调用onPause()方法后运行的进程。

另外,为什么每次都以这种方式保存偏好?用户与其互动时保存,或只需按Android's settings pattern

答案 2 :(得分:0)

您可以尝试将onStop()代码移至onPause()事件。也许这会解决你的问题。