Что происходит с задачами в диспетчерских очередях, когда приложение переходит в неактивное/фоновое/приостановленное состояние в iOS?
Я просматривал документацию Apple по состояниям приложений и Grand Central Dispatch, но я не нашел хорошего ответа на этот вопрос.
Согласно документации Apple, на iOS 4.0:
Приложение находится в фоновом режиме, но не выполняет код. система автоматически перемещает приложение в это состояние и соответствующие времена. Хотя это приостановлено, приложение по существу лиофилизируется в текущем состоянии и не выполняет никакого кода. В условиях низкой памяти система может продувать приостановленную приложений без уведомления, чтобы сделать больше места для переднего плана приложение.
Итак, если система не очищает приостановленное приложение (приостановлено → не работает переход), что происходит с задачами, которые в настоящее время выполняются в очереди отправки? Фраза "Сухое лиофилизированное" оставляет желать лучшего - точно , что лиофилизируется?
Моя интерпретация - это то, какие очереди GCD, которые приложение использует во время приостановки, должны быть восстановлены, когда приложение переходит в активное состояние; при этой интерпретации задачи, существовавшие в очередях ОСП с предварительной приостановкой, исчезнут. Является ли моя интерпретация правильной?
Ответы
Ответ 1
Когда приложение приостановлено, весь процесс заморожен. Вы можете рассчитывать на возобновление процесса, как будто ничего не произошло сразу после его возобновления. Ваши логические очереди GCD-приложений не исчезают, они остаются такими, какие были в памяти. И потоки GCD, созданные в вашем процессе для обслуживания ваших очередей, возобновляются на месте, как будто ничего не произошло.
Таким образом, ваша интерпретация неверна: задачи, возникающие в предварительных приостановках GCD, не исчезают при возобновлении. Они никогда не уходили; они были только приостановлены.