В чем разница между Preference и SharedPreferences?

SharedPreferences – это интерфейс для работы с key-value хранилищем на диске, в которое можно сохранять примитивные типы и строки. Название SharedPreferences пошло от того, что это хранилище предназначено для небольшого количества разрозненных данных, например пользовательских настроек.

Preference – это класс, который представляет UI-блок в PreferenceFragment и используется для UI-отображения пользовательских настроек. Если у объекта Preference задан атрибут key, то значения автоматически сохраняются в SharedPreferences по ключу.

Допустим, на экран настроек добавлен элемент SwitchPreferenceCompat:

<SwitchPreferenceCompat
app:key="notifications"
app:title="@string/notifications_pref_title"/>


Этот элемент будет показан пользователю как toggle-переключатель. Когда пользователь включает переключатель, в SharedPreferences сохраняется пара ключ-значение "notifications" : "true".

Таким образом SharedPreferences – это системное хранилище, а класс Preference – это один из элементов UI надстройки над этим хранилищем.