Выбор ответа Junior Room и хранение данных обновлено
Запрос Room на главном потоке
Вопрос
Что будет при вызове синхронного (не suspend) DAO-метода fun all(): List<Article> на главном потоке?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Будет IllegalStateException: доступ к базе с главного потока запрещён. По умолчанию Room проверяет поток и запрещает обращение к базе с главного, чтобы не было подвисаний и ANR.
Варианты ответа
- Будет
IllegalStateException: доступ к базе с главного потока запрещёнправильный ответ - Всё сработает, просто медленнее, и Lint покажет предупреждение
- Room сам перенесёт запрос на фоновый executor и дождётся результата
- Вернётся пустой список, а реальный запрос выполнится в фоне позже
Разбор
По умолчанию Room проверяет поток и запрещает обращение к базе с главного, чтобы не было подвисаний и ANR. Решения: suspend-методы (Room сам выполняет их на фоновом executor), Flow, или явный перенос в withContext(Dispatchers.IO). allowMainThreadQueries() отключает проверку, но это только для тестов.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.