Какие средства персистентного хранения данных есть в Android
Что проверяют
Знаете ли вы весь набор вариантов и умеете ли выбирать по задаче, а не по привычке. Интервьюер ждёт, что вы разложите хранилища по типу данных: настройки, структурированные записи, файлы, секреты. Следом почти всегда спрашивают, где хранить токен авторизации и что попадёт в облачный бэкап.
Как отвечать
- DataStore: современная замена
SharedPreferences, работает на корутинах иFlow, не блокирует главный поток. Preferences DataStore для пар ключ-значение, Proto DataStore для типизированной схемы; - SharedPreferences: жив в старом коде, у него
commit()синхронный, аapply()асинхронный, но оба умеют подвесить UI при большом файле. Новый код на нём не пишут; - Room: слой над SQLite с проверкой запросов на этапе компиляции,
suspend-функциями иFlow, миграциями и автомиграциями. Стандартный выбор для структурированных данных, начиная с версии 2.7 работает и в KMP; - SQLite напрямую: имеет смысл, когда нужен полный контроль или уже есть готовая схема;
- файлы:
filesDirдля приватных данных,cacheDirдля того, что система вправе удалить,getExternalFilesDir()без разрешений. Со времён Android 10 действует scoped storage: общие медиа идут через MediaStore, чужие файлы через Storage Access Framework; - ContentProvider: не хранилище, а способ отдать свои данные другому приложению или системному компоненту.
Отдельно про секреты: токены шифруются ключом из Android Keystore, библиотека androidx.security:security-crypto больше не развивается, поэтому её место занимает работа с Keystore напрямую. И про Auto Backup: по умолчанию настройки и содержимое filesDir уезжают в облако, исключения задаются в dataExtractionRules, иначе токен приедет на чужое устройство при восстановлении.
Где спотыкаются
Кладут в SharedPreferences килобайты JSON. Файл читается целиком в память при первом обращении и остаётся там на всё время жизни процесса.
Путают кэш и персистентность: складывают в cacheDir то, что нельзя терять, а система чистит его при нехватке места.
Не могут объяснить миграции Room. Забытая версия схемы это краш у всех, кто обновился, а не абстрактная теория.