Выбор ответа Senior Room и хранение данных обновлено

Несколько экземпляров DataStore

Вопрос

Почему DataStore объявляют делегатом верхнего уровня val Context.settings by preferencesDataStore("settings"), а не создают в каждом классе?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: На один файл в процессе нужен один экземпляр DataStore, иначе будет исключение. DataStore держит кеш данных в памяти и гарантирует согласованность только если он единственный владелец файла.

Варианты ответа

  1. На один файл в процессе нужен один экземпляр DataStore, иначе будет исключениеправильный ответ
  2. Так короче и удобнее: делегат избавляет от передачи Context в каждый класс
  3. Делегат шифрует файл настроек ключом приложения, а прямое создание нет
  4. Иначе DataStore будет работать только на главном потоке и блокировать UI

Разбор

DataStore держит кеш данных в памяти и гарантирует согласованность только если он единственный владелец файла. Второй экземпляр для того же файла в процессе приводит к IllegalStateException (multiple DataStores active for the same file). Делегат верхнего уровня или синглтон в DI обеспечивают один экземпляр. Шифрования и привязки к потоку делегат не даёт.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.