Простой вопрос по Android Core, на который даже сеньоры отвечают неправильно
Итак, если ты ответил, что будет ANR, то поздравляю — ты абсолютно нормальный человек, у тебя скорее всего много друзей, есть девушка и в целом в жизни все прекрасно. Но ответ неправильный…
Давай разбираться, в чем дело.
1) Дело в runBlocking? Может там диспатчер какой-то необычный?
Ну, это было бы подло назвать вопрос по Android Core, а сам вопрос лежал бы в корутинах. То есть дело не в runBlocking. Он работает так, как ожидается. Просто блокирует текущий поток.
2) Получается дело в самом ANR?
Да, уже очень тепло, осталось вспомнить один момент.
Слово ANR и блокировка потока всегда звучат рядом, когда заходит об этом речь. Мы обычно думаем, что раз поток заблокирован, то через 5 секунд появится окошко: «Приложение не отвечает»
А теперь кульминация: условие для возникновения ANR — это когда входные события (кнопки и сенсорные события) не обрабатываются в течение 5 секунд.
Я думаю, уже стало все понятно, но лучше проговорим.
У нас запускается приложение, в onCreate мы блокируем поток, поэтому другие методы ЖЦ не вызываются. onResume не вызвался, поэтому взаимодействовать с UI мы не можем.
Если взаимодействовать с UI мы не можем, то и условие для ANR мы не выполним. Поэтому приложение будет благополучно ждать, пока мы разблокируем поток, и запустится как обычно.
Интересно, что необязательно нажать на кнопки или другие элементы UI. Можно нажать просто в любую точку экрана и ANR появится.
Возможно, эта инфа не особо важная, без нее жить можно. В реальной разработке ты словишь ANR в любом случае, так как будет тыкать на экран. Но по-моему забавно, так как мы все понимаем, что человек умирает не от сигарет, а от рака, который был спровоцирован сигаретами.
PS
Кто ответил правильно сразу — респект, но, пожалуйста, не забывайте выходить на улицу (без негатива).