РЕДАКТИРОВАТЬ: Проблема, описанная ниже, возникла из-за очень специфической проблемы устройства, не вызванной какой-либо проблемой, связанной с кодированием.
У меня есть 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, и это все равно имело тот же эффект.
И я удалил приложение с телефона, а затем включил телефон выключить и снова включить, а затем переустановить, и он все равно будет иметь тот же эффект.