Как смело утверждать, что общих настроек нет - PullRequest
0 голосов
/ 07 августа 2011

Я пытался выяснить, как безопасно утверждать, что настройки нигде не хранятся. Похоже, что механизм кэширования еще не понят, и документы не разъясняют его. Вот что я сделал:

File prefsFile = new File("/data/data/"+context.getPackageName() + "/shared_prefs/"
    + context.getPackageName() + "_preferences.xml");
prefsFile.delete();
assertFalse(prefsFile.exists()); // success

// This assertion could fail - why?
assertEquals(0, context.getSharedPreferences(context.getPackageName()+"_preferences",
    MODE_PRIVATE).getAll().size());

Хотя я удалил файл prefs, все же возможно, что getAll().size() вернет ненулевое значение.

Может кто-нибудь объяснить, почему?

1 Ответ

2 голосов
/ 07 августа 2011

Я пытался выяснить, как безопасно утверждать, что настройки нигде не хранятся.

Почему?

Может кто-нибудь объяснить, почему?

Вне моей головы:

  • Вы на самом деле не проверяете, существует ли файл перед его удалением или каталог существует
  • Выжестко кодируют путь, который может быть неправильным на всех устройствах
  • Вы предполагаете, что при удалении файла удаляется внутренняя копия SharedPreferences
  • Вы не удосуживаетесь посмотретьна HashMap, возвращаемом getAll(), чтобы увидеть, есть ли ваши данные, или если это какие-то системные значения начальных значений

Если вы хотите очистить SharedPreferences, не пытайтесьудаляя файл.Либо позвоните edit().clear().commit() или edit().clear().apply() на ваш SharedPreferences объект.

...