Простой вопрос по Android Core, на который даже сеньоры отвечают неправильно

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

Мне кажется, я придумал очень простой вопрос, который можно задать любому андроид-разработчику, при этом ответ будет либо совсем неправильным, либо неточным (а это по сути неправильный)

Признаюсь, когда я придумал его, мое лицо стало прямо как на картинке ниже:

Лицо человека, знающего правильный ответ
Лицо человека, знающего правильный ответ

Ладно, не буду томить и сразу перейдем к сути. Только давайте договоримся, что не будем гуглить, а сначала подумаем.

Итак, я понимаю, ты ожидаешь какой-то хитрый вопрос, где есть какой-то подвох.
Спойлер -- подвоха НЕТ.

Просто отвечай так, как тебе подсказывает твоя голова.

У нас есть вот такой код:

В onCreate мы просто блокируем главный поток на довольно большое время.
Вопрос: что произойдет с программой? Ответ объясни.

Вот прямой сейчас остановись и дальше не читай. Напиши свой ответ в комментарии, а потом можешь прочитать все, что находится ниже.

Не открывай спойлер раньше времени, не совершай ошибку :-)

Итак, если ты ответил, что будет ANR, то поздравляю - ты абсолютно нормальный человек, у тебя скорее всего много друзей, есть девушка и в целом в жизни все прекрасно. Но ответ неправильный..

Давай разбираться, в чем дело.

1) Дело в runBlocking? Может там диспатчер какой-то необычный?

Ну, это было бы подло назвать вопрос по Android Core, а сам вопрос лежал бы в корутинах. То есть дело не в runBlocking. Он работает так, как ожидается. Просто блокирует текущий поток.

2) Получается дело в самом ANR?

Да, уже очень тепло, осталось вспомнить один момент.

Слово ANR и блокировка потока всегда звучат рядом, когда заходит об этом речь. Мы обычно думаем, что раз поток заблокирован, то через 5 секунд появится окошко: "Приложение не отвечает"

А теперь кульминация: условие для возникновения ANR - это когда входные события (кнопки и сенсорные события) не обрабатываются в течение 5 секунд.

Я думаю, уже стало все понятно, но лучше проговорим.

У нас запускается приложение, в onCreate мы блокируем поток, поэтому другие методы ЖЦ не вызываются. onResume не вызвался, поэтому взаимодействовать с UI мы не можем.
Если взаимодействовать с UI мы не можем, то и условие для ANR мы не выполним. Поэтому приложение будет благополучно ждать, пока мы разблокируем поток, и запустится как обычно.

Интересно, что необязательно нажать на кнопки или другие элементы UI. Можно нажать просто в любую точку экрана и ANR появится.

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

PS
Кто ответил правильно сразу - респект, но, пожалуйста, не забывайте выходить на улицу (без негатива).

Источник: https://habr.com/ru/articles/783780/


Интересные статьи

Интересные статьи

Всем привет! Знание работы сокетов - одно из базовых знаний в программировании.В этом туториале я разберу, что такое TCP/IP, сокеты, и даже напишем свое серверное-клиентское приложение на C++
Введение в трассировку лучей: простой метод создания 3D-изображенийПервое, что нам нужно для создания изображения, - это двумерная поверхность (эта поверхность должна иметь некоторую площадь и не може...
Самые заядлые алкоголики в царстве животных намного меньше, чем можно себе представить. Например, слоны это массивные животные, но относительно опьянения легковесны – им не хватает гена метаболизма ал...
Я не являюсь профессиональным разработчиком с огромным стажем в данной области (и это даже не хобби, а лишь нужда в разработке конкретного приложения), потому данная стат...
Не будет преувеличением сказать, что тема этой публикации вынесена из комментариев, а именно из обсуждения статьи о бонобо Канзи. Благодарю уважаемого @kraidiky за ссылку...