Когда приложение iOS переходит в фоновый режим, приостановлены ли длительные задачи?

Да, я знаю, если я хочу, чтобы мое приложение реагировало на многозадачные действия пользователей, например, переключиться на другое приложение, я должен иметь дело с

- (void)applicationWillResignActive:(UIApplication *)application - (void)applicationDidBecomeActive:(UIApplication *)application 

Что делать, если мое приложение выполняет довольно долгую операцию (например, загрузку большого файла), и пользователь заставляет мое приложение войти в фоновый режим? Будет ли эта операция автоматически приостановлена ​​и возобновлена, когда пользователь вернется в мое приложение?

Что именно произойдет за сценой, когда мое приложение войдет в фон или возобновится на переднем плане?

Что делать, если пользователи позволяют моему приложению перейти на задний план, выполнение моего приложения находится только в середине метода?

Например, мое приложение делает

 for (int i = 1 to 10000K) { do some calculation; } 

Когда i == 500K, пользователь переключается на другое приложение. Что происходит с циклом for-loop в моем приложении?

    3 Solutions collect form web for “Когда приложение iOS переходит в фоновый режим, приостановлены ли длительные задачи?”

    Из руководства по программированию приложений для iOS :

    Приложение applicationDidEnterBackground: вашего делегата applicationDidEnterBackground: для выполнения любых задач и возврата требуется около 5 секунд. На практике этот метод должен возвращаться как можно быстрее. Если метод не вернется до истечения времени, ваше приложение будет убито и очищено из памяти. Если вам все еще нужно больше времени для выполнения задач, вызовите метод beginBackgroundTaskWithExpirationHandler: чтобы запросить время выполнения фона, а затем запустите любые длительные задачи во вторичном streamе. Независимо от того, запускаете ли вы какие-либо фоновые задачи, метод applicationDidEnterBackground: должен оставаться в течение 5 секунд.

    Если длинная работа, описанная выше, находится в основном streamе, и после того, как ваше приложение направится к фону, потребуется больше 5 секунд, ваше приложение будет убито. Основной stream будет заблокирован, и у вас не будет возможности вернуться из -applicationDidEnterBackground: вовремя.

    Если ваша задача выполняется в фоновом streamе (и это действительно должно быть, если это -applicationDidEnterBackground: много времени), этот stream будет приостановлен, если приложение вернется из -applicationDidEnterBackground: (согласно обсуждению в этом ответе ). Он будет возобновлен, когда приложение будет возвращено на передний план.

    Тем не менее, в последнем случае вы все равно должны быть готовы к тому, что ваше приложение будет прекращено в любое время, пока оно находится в фоновом режиме, очищая вещи на вашем пути к фону.

    Если вы выполняете некоторую операцию, которая может потреблять время, и вы не хотите ее убивать, вы можете продлить время для своей работы, выполнив в UIBackground Task i

     { UIBackgroundTaskIdentifier taskId = 0; taskId = [application beginBackgroundTaskWithExpirationHandler:^{ taskId = UIBackgroundTaskInvalid; }]; // Execute long process. This process will have 10 mins even if your app goes in background mode. } 

    Аргумент блока, называемый «обработчик», – это то, что произойдет, когда истечет фоновая задача (10 минут). Вот ссылка на документацию

    Как упоминалось выше, есть несколько случаев, когда ваше приложение работает в фоновом режиме, и яблоко может разрешать или отклонять в зависимости от того, что вы делаете.

    https://developer.apple.com/library/ios/documentation/iphone/conceptual/iphoneosprogrammingguide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html

    Что еще более важно, если вы вписываетесь в одну из этих категорий, частота обновления вашего приложения определяется алгоритмом Apple, который учитывает использование вашего приложения на этом устройстве и других приложениях. Если ваше приложение используется чаще, он получает больше фонового времени. Это всего лишь одна переменная, но вы понимаете, что распределение фонового времени зависит от приложения и приложения, а не под вашим контролем.

    Давайте будем гением компьютера.