Задача данных URL является асинхронной. Ваш код не ждет, пока не завершится, прежде чем отобразить диалоговое окно.
Это все равно, что отправить кого-то в сад, чтобы посчитать, сколько яблок он видит лежащими на земле, чтобы вы могли положить это число на лист бумаги. , Вы указываете этому человеку подсчет go и кладете результат в поле, где в настоящее время хранится ноль. Как только человек уходит, вы открываете коробку и записываете номер, который видите. Тем не менее, человек даже не прибыл в сад, и при этом он еще не считал яблок. Когда человек возвращается, он делает, как вы сказали ему, положите количество подсчитанных яблок в коробку. Теперь вы снова отправляете человека, на этот раз считая цифры или груши, которые он может видеть в саду. И снова, как только человек ушел, вы открываете коробку и записываете число, которое видите там, но это все равно число от подсчета яблок, поскольку у человека даже не было возможности обновить это число.
Блок, который вы передаете на getDownloadSize()
, будет запущен, как только будет получен результат, но код ниже этого вызова выполняется сразу после вызова getDownloadSize()
, он не будет ждать, пока блок не будет выполнен.
И было бы неплохо изменить это, так как получение результата может занять от нескольких секунд до нескольких минут. Если выполнение кода будет блокироваться до тех пор, пока не будет получен результат, все ваше приложение также будет блокироваться на это время (ваш пользовательский интерфейс полностью зависнет, взаимодействие с пользователем будет невозможно).