编辑:下面描述的问题是由于非编码相关的非常奇特的设备问题引起的。
我有一个PreferenceActivity,在其中有许多checkBoxPreferences。 checkBoxPreference应该保存默认的共享首选项文件,然后在我打开应用程序时再次调用它以更新UI。
但这并不像它应该的那样发生。 如果我关闭应用程序并重新打开它,我的值会保持正常,但是如果我使用任务管理器结束应用程序或者在应用程序没有运行时重新启动手机,则会再次调用defaultValues。
因此,在我的onResume()中创建了一个SharedPreference来进行测试。
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
然后我检查那个sharedpreference中是否有一个键。
pref.contains("myCheckBoxPreference");
当我关闭应用再重新打开时,它返回true。但如果我使用任务管理器强行关闭或者重启手机后再打开,那么就会返回false。
因此,我尝试手动设置SharedPreference。
SharedPreferences.Editor editor = pref.edit();
editor.putBoolean("myCheckBoxPreference", myCheckBoxPreference.isChecked());
editor.commit();
之后我在checkboxpreference值改变时调用了它。我还尝试在onStop和onPause中调用它。但是,如果我关闭应用程序并重新打开它,pref.contains返回true,但如果我关闭手机并重新打开它,则返回false。
所以我尝试使用SharedPreferences文件。
在类声明中:
public static final String PREFS = "prefs";
然后在onResume()方法中:
SharedPreferences pref = this.getSharedPreferences(PREFS, 0);
同样的行为,如果我只是关闭应用并重新打开它,pref.contains仍然返回true,但是如果我关机然后重新开机,它将返回false。
然后我尝试将myCheckBoxPreference的键值更改为与CheckBoxPreference的xml键不匹配的值,但它仍具有相同的效果。
我还卸载了手机上的应用程序,然后关闭手机并重新打开,然后重新安装,但仍然具有相同的效果。
onCreate
。 - ccpizzaLog.d("prefstest", "Pref == " + pref);
的代码行,它将把数据输出到 Eclipse 的 logcat 输出中。在终端窗口上键入adb logcat
也可以读取。非常方便。 - mikebabcock