РЕДАКТИРОВАТЬ: Проблема, описанная ниже, была связана с очень специфической проблемой устройства, не вызванной какой-либо проблемой, связанной с кодированием.
У меня есть preferenceActivity, в котором у меня есть много checkBoxPreferences.
Предполагается, что checkBoxPreference сохраняет файл общих настроек по умолчанию, а затем снова вызывается при открытии приложения для обновления пользовательского интерфейса.
Это не так, как должно быть.
Если я закрою приложение и снова открою его, мои значения останутся такими, какими они должны быть, но если я использую диспетчер задач для завершения приложения или если я выключу и снова включу телефон (когда приложение не запущено), то вызываются значения по умолчанию еще раз.
Итак, я создал SharedPreference в моем onResume () для его проверки.
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
Затем я проверяю, есть ли ключ в этом общем предпочтении.
pref.contains("myCheckBoxPreference");
Когда я закрываю и снова открываю его, он возвращает истину. если я закрываю с диспетчером задач или выключаю и снова включаю телефон, то это возвращает 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 на то, что НЕ соответствовало ключу xml для CheckBoxPreference, и оно все равно имело тот же эффект.
И я удалил приложение с телефона, затем выключил и снова включил телефон, а затем переустановил, и он все еще имеет тот же эффект.