Что такое SharedPreferences?
SharedPreferences — это механизм в Android для простого и лёгкого хранения пар "ключ-значение" в перманентной памяти устройства. Он используется для хранения небольших объёмов данных, которые должны сохраняться между запусками приложения. Данные хранятся в виде XML-файла внутри приватной директории приложения.
🔹 Где применяется SharedPreferences
-
Сохранение пользовательских настроек и флагов (темная тема, авторизация, первый запуск).
-
Сохранение токенов доступа, ID и состояний.
-
Хранение конфигурации без необходимости базы данных.
📁 Где физически хранятся данные
XML-файлы SharedPreferences находятся по пути:
/data/data/<package_name>/shared_prefs/<file_name>.xml
Это внутренняя память, недоступная другим приложениям (если не root).
🔧 Пример использования
Сохранение данных:
val prefs = getSharedPreferences("my_prefs", Context.MODE_PRIVATE)
prefs.edit().putBoolean("dark_mode", true).apply()
-
"my_prefs" — имя файла настроек.
-
putBoolean(...) — записывает значение.
-
apply() — сохраняет данные асинхронно (без блокировки потока).
Получение данных:
val prefs = getSharedPreferences("my_prefs", Context.MODE_PRIVATE)
val isDarkMode = prefs.getBoolean("dark_mode", false)
- Второй аргумент — значение по умолчанию, если ключ не найден.
🧠 Способы сохранения
-
apply() — сохраняет асинхронно, быстрее, не возвращает результат.
-
commit() — сохраняет синхронно, возвращает true/false, но может блокировать поток.
Предпочтительнее использовать apply() для UI-приложений.
Ключевые особенности
Характеристика | Описание |
---|---|
Формат хранения | XML |
--- | --- |
Типы данных | String, Int, Boolean, Float, Long, Set<String> |
--- | --- |
Поддержка многопоточности | Есть, но возможны конфликты при одновременной записи |
--- | --- |
Максимальный объём данных | Рекомендуется не превышать 1–2 МБ |
--- | --- |
Доступ | Только внутри приложения |
--- | --- |
Удаление данных | Через remove(key) или clear() |
--- | --- |
Ограничения
- **Не подходит для хранения больших объёмов данных.
** -
Нет строгой типизации — можно случайно читать Int как String, и получить ClassCastException.
-
Нет миграции или схемы — управление версиями данных вручную.
-
Устаревает — в новых проектах часто заменяют на DataStore.
🔐 Безопасность
-
Данные в SharedPreferences хранятся незашифрованными по умолчанию.
-
Для конфиденциальных данных рекомендуется использовать:
EncryptedSharedPreferences из Android Jetpack Security.
✅ Когда использовать SharedPreferences
Используйте, если нужно:
-
хранить флаги, настройки, логины, токены;
-
работать с простыми, небольшими значениями;
-
сохранять данные, которые не требуют структурности и связей.
Если нужно работать с более сложными данными — используйте Room или DataStore.
🧠 Итого
SharedPreferences — это простой и быстрый способ хранения ключ-значение данных внутри Android-приложения. Он удобен для настроек и флагов, легко использовать, не требует базы данных, но не подходит для хранения больших или сложных структурированных данных.