Что происходит при вызове requireContext если Context равен null
Что проверяют
Понимаете ли вы жизненный цикл фрагмента и зачем вообще нужна пара из мягкого и жёсткого способа получить контекст. Вопрос почти всегда ведёт к настоящей теме: откуда берутся отложенные колбэки, которые приходят на уже отцепленный экран.
Как отвечать
Метод ничего не возвращает вместо отсутствующего контекста: он бросает IllegalStateException с текстом про то, что фрагмент не прикреплён. Это сознательный выбор: разбирать необязательный тип на каждом обращении неудобно, поэтому невозможное состояние превращают в явный сбой вместо тихого пропуска действия.
Контекста нет только в понятных точках жизненного цикла: до присоединения к активности, после отсоединения и у фрагмента, который создали, но не добавили. Между этими точками контекст есть всегда, поэтому внутри колбэков создания вью вызов безопасен по определению.
Вывод для ответа: падение это не проблема метода, а сигнал, что работа пережила экран. Лечится не проверкой, а отменой:
- корутины интерфейса привязывать к жизненному циклу вью, а не к фрагменту и не к глобальной области;
- подписки и слушатели снимать при уничтожении вью, там же обнулять биндинг;
- для того, что не рисует и не берёт тему, использовать контекст приложения, тогда экран вообще не нужен.
Где спотыкаются
Оборачивают вызов в проверку прикреплённости и считают вопрос закрытым. Падение уходит, а вместе с ним и результат работы: ответ пришёл, обновлять нечего, экран остался пустым, и громкий сбой превратился в молчаливый баг.
Ставят такую проверку там, где фрагмент прикреплён по определению. Это сразу показывает, что жизненный цикл не выучен, а обходится наугад, по следам прошлых падений.
Подменяют контекст экрана контекстом приложения везде подряд. Диалог, надувание разметки и всё, что берёт тему и стили, на контексте приложения дадут либо сбой, либо экран без оформления.