Что происходит с задачами в очередях отправки, когда приложение переходит в неактивное / фоновое / приостановленное состояние в iOS? - PullRequest
19 голосов
/ 31 июля 2011

Я изучал документацию Apple о состояниях приложений и Grand Central Dispatch, но я не нашел хорошего ответа на этот вопрос.

Согласно документации Apple, на iOS 4.0:

Приложение работает в фоновом режиме, но не выполняет код. Система автоматически переводит приложение в это состояние подходящие времена. В то время как приостановлено, приложение по существу лиофилизирован в своем текущем состоянии и не выполняет никакого кода. В условиях нехватки памяти система может продувать приостановлено приложения без уведомления, чтобы освободить место для переднего плана применение.

Итак, если система не удаляет приостановленное приложение (приостановлено -> не выполняет переход), что происходит с задачами, которые в данный момент выполняются в очереди отправки? Фраза «по существу лиофилизированная» оставляет желать лучшего - точно что лиофилизирована?

Моя интерпретация заключается в том, какие очереди GCD приложение использует во время приостановки, необходимо будет восстановить, когда приложение переходит обратно в активное состояние; согласно этой интерпретации, задачи, существующие в очередях GCD до приостановки, исчезли бы. Правильна ли моя интерпретация?

1 Ответ

19 голосов
/ 02 августа 2011

Когда приложение приостановлено, весь процесс заморожен. Вы можете рассчитывать на возобновление процесса, как будто ничего не произошло вообще после его возобновления. Логические очереди GCD ваших приложений не исчезают, а остаются в памяти. И потоки, созданные GCD в вашем процессе для обслуживания ваших очередей, возобновляются, как будто ничего не происходит.

Таким образом, ваша интерпретация неверна: задачи, существующие в очередях GCD до приостановки, не исчезают при возобновлении. Они никогда не уходили; они были только на паузе.

...