编辑:下面描述的问题是由于一个非常特殊的设备问题,不是由任何与编码相关的问题引起的。
我有一个preferenceactivity,其中有许多checkboxpreferences。
checkboxpreference将保存默认的共享首选项文件,然后在我打开应用程序以更新ui时再次调用。
这种情况并不像人们想象的那样发生。
如果我关闭应用程序并将其打开备份,则我的值将保持其预期值,但如果我使用任务管理器结束应用程序,或者如果我关闭手机(当应用程序未运行时),则将再次调用默认值。
所以,我在onresume()中创建了一个sharedpreference来测试它。

SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

然后我检查sharedpreference中是否有密钥。
pref.contains("myCheckBoxPreference");

当我关闭并打开它时,它返回真值。如果我关闭任务管理器或关闭并打开手机电源,则返回false。
所以,我尝试手动设置sharedpreference
SharedPreferences.Editor editor = pref.edit();
editor.putBoolean("myCheckBoxPreference", myCheckBoxPreference.isChecked());
editor.commit();

然后当checkboxpreference值改变时我调用了它。我还试着在停止和暂停时调用它。不过,如果我关闭应用程序并重新打开,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键不匹配的值,它仍然具有相同的效果。
我从手机上卸载了应用程序,然后关机再开机,然后重新安装,它仍然具有相同的效果。

最佳答案

我刚刚解决了,我很确定。我没有代码错误,我的应用也没有任何问题(无论如何,我不相信)。
我创建了一个名为“testproj”的新项目,然后从设置首选项活动复制了所有代码,将其粘贴到testprojactivity中,然后从它所依赖的xml复制代码,然后将其粘贴到testproj的main.xml中。
然后我在Samsung Captivate上安装了TestProj,更改了周围的设置,通过RAM管理清除了RAM(这是我拥有的自定义ROM的一个功能),设置也被卡住了。然后我打开手机的电源,设置仍然在那里,就像我配置的那样。
当我手动设置它们时,它们都留下了:

PreferenceManager.getDefaultSharedPreferences();

而且不需要手动将它们保存到sharedpreferences。
因为它不是我的手机,我还没试过,但我想工厂数据重置会完全修复它
编辑:我可以测试一个新的三星Captivate和一个三星infuse,它工作了。
我浪费了很多时间想弄清楚这件事,我希望它能帮助别人。:)

07-27 16:33