Выбор ответа Senior Room и хранение данных обновлено
Несколько экземпляров DataStore
Вопрос
Почему DataStore объявляют делегатом верхнего уровня val Context.settings by preferencesDataStore("settings"), а не создают в каждом классе?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: На один файл в процессе нужен один экземпляр DataStore, иначе будет исключение. DataStore держит кеш данных в памяти и гарантирует согласованность только если он единственный владелец файла.
Варианты ответа
- На один файл в процессе нужен один экземпляр DataStore, иначе будет исключениеправильный ответ
- Так короче и удобнее: делегат избавляет от передачи Context в каждый класс
- Делегат шифрует файл настроек ключом приложения, а прямое создание нет
- Иначе DataStore будет работать только на главном потоке и блокировать UI
Разбор
DataStore держит кеш данных в памяти и гарантирует согласованность только если он единственный владелец файла. Второй экземпляр для того же файла в процессе приводит к IllegalStateException (multiple DataStores active for the same file). Делегат верхнего уровня или синглтон в DI обеспечивают один экземпляр. Шифрования и привязки к потоку делегат не даёт.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.