Что может произойти при синхронном сетевом запросе на Activity, если приложение свернули
Что проверяют
Знаете ли вы, что сеть в главном потоке запрещена самой платформой, и понимаете ли, что происходит с Activity и её задачами после сворачивания. Вопрос проверяет связку трёх тем: потоки, жизненный цикл, утечки.
Как отвечать
Сначала разделить два случая. Если запрос синхронный и выполняется в главном потоке, он упадёт сразу при вызове: система кидает NetworkOnMainThreadException в момент обращения к сети, независимо от того, свернули приложение или нет. Свёрнутость тут ни при чём, ошибка возникает всегда.
Если запрос синхронный, но выполняется в фоновом потоке, сворачивание его не отменяет. Поток живёт дальше, соединение висит, и когда ответ приходит, колбэк обращается к Activity, которая уже остановлена или уничтожена. Отсюда три последствия: утечка памяти, потому что анонимный колбэк держит ссылку на Activity, обращение к разрушенным View, и IllegalStateException при попытке закоммитить транзакцию фрагментов после onSaveInstanceState.
Правильный ответ про то, где должна жить такая работа: корутина в viewModelScope, результат через StateFlow, подписка на UI через repeatOnLifecycle(STARTED). Тогда сворачивание просто приостанавливает доставку, а поворот экрана не теряет запрос. Работу, которая обязана дожить до конца, отдают WorkManager.
Где спотыкаются
Отвечают, что исключение возникнет при возврате в приложение. Оно летит в момент сетевого вызова в главном потоке, и увидеть его свёрнутым приложением невозможно, потому что упадёт всё гораздо раньше.
Выносят запрос в поток, но оставляют колбэк со ссылкой на Activity или на binding. Сворачивание плюс поворот дают утечку и падение при обращении к уже обнулённой разметке. У фрагмента binding обнуляют в onDestroyView, у подписок нужна отмена.
Предлагают AsyncTask. Он объявлен устаревшим, про жизненный цикл ничего не знает и ровно эту проблему не решает. Заодно путают сворачивание и убийство процесса: система вправе убить приложение в фоне, тогда запрос не продолжится ниоткуда, а Activity при возврате создастся заново и состояние придётся восстанавливать.