Что такое SharedPreferences

Ответ

SharedPreferences — это легковесное хранилище ключ-значение для сохранения простых данных (примитивы, строки) в виде XML-файла. Подходит для небольших настроек (например, флаги, токены, пользовательские предпочтения).

Пример:

// Запись
val prefs = getSharedPreferences("MyPrefs", MODE_PRIVATE)
prefs.edit().putString("token", "abc123").apply()

// Чтение
val token = prefs.getString("token", null)

Особенности:

  • Работает в UI-потоке (используйте apply() для асинхронности).
  • Нет типизации и проверки на ошибки.
  • Не подходит для сложных данных (используйте Room или DataStore).
  • Данные удаляются при удалении приложения.

Ответ 18+ 🔞

А, SharedPreferences! Ну это ж классика, ёпта, как бабушкин сундук с приданым — туда всё скидывают, а потом полдня ищешь, где там носки завалялись.

Представь себе такую хуйню: тебе надо сохранить какую-нибудь ерунду в приложении. Не овердохуища данных, а так, мелочь — токен пользователя, галочку «запомнить меня» или последний выбранный размер шрифта. Вот для этого и придумали SharedPreferences, ядрёна вошь. По сути, это просто XML-файлик, куда всё пишется в формате «ключ — значение», как в словарик для первоклашки.

Работает проще пареной репы. Вот смотри, как токен запихнуть:

// Запись
val prefs = getSharedPreferences("MyPrefs", MODE_PRIVATE)
prefs.edit().putString("token", "abc123").apply()

Видишь этот .apply()? Это чтобы не тормозить главный поток. Без него можно было бы использовать .commit(), но он синхронный и может всё зависнуть, если ты вдруг решишь в UI-потоке полгигабайта туда впендюрить. А так — тикай себе, сохраняйся в фоне.

А чтобы достать обратно, вообще красота:

// Чтение
val token = prefs.getString("token", null)

Всё, приехали. Достал и пользуйся. Второй параметр — это дефолтное значение, если по такому ключу нихуя не найдётся. Удобно, правда?

Но тут, чувак, есть свои подводные камни, и их дохуя. Во-первых, типизации там, блядь, ноль. Записал строку, а пытаешься прочитать как булево — получишь или null, или ебучку с крешами. Сам следи за типами, никто за тебя думать не будет.

Во-вторых, это не для сложных структур. Захотел ты туда список из ста объектов сохранить — не, братан, не сюда. Это пиздопроебибна затея. Для такого есть Room или тот же DataStore. А Prefs — только для примитивов и строк, запомни как «Отче наш».

И главное — данные эти живут ровно до тех пор, пока пользователь не снесёт твоё приложение к ебеням. Нажал «Удалить» — и всё, прощай, мой токен, как будто тебя и не было. Для настроек, которые должны пережить апокалипсис, это не годится.

Короче, инструмент как инструмент. Простой, старый, всем знакомый. Как молоток: гвозди забивать — идеально, микрохирургию делать — нихуя не получится. Используй с умом, и волнение ебать не будет.