приложение не должно закрываться при выполнении задач конечной длины
Это не обещано вообще.Есть много причин, по которым ваше приложение может быть закрыто.beginBackgroundTask
- это запрос к ОС на дополнительное время для завершения кратковременной операции для пользователя.Он не обещает, что ваш запрос будет удовлетворен.
Конкретный способ, которым вы делаете это, вероятно, иногда может потерпеть неудачу, и конкретно рассматривается в документации:
Позвоните этомукак можно раньше, прежде чем начинать задание, и желательно до того, как ваше приложение действительно войдет в фоновый режим.Метод запрашивает утверждение задачи для вашего приложения асинхронно.Если вы вызываете этот метод незадолго до того, как ваше приложение должно быть приостановлено, есть вероятность, что система может приостановить ваше приложение до того, как это утверждение задачи будет предоставлено.Например, не вызывайте этот метод в конце метода applicationDidEnterBackground (_ :) и ожидайте, что ваше приложение продолжит работу.Если система не может предоставить утверждение задачи, она вызывает ваш обработчик срока действия.
Вы хотите обернуть конкретную операцию, для которой вы хотите запросить время.Вы всегда переносите эту операцию, независимо от того, думаете ли вы, что уходите на задний план или нет.Вы не просто вызываете это каждый раз, когда переходите в фоновый режим.
, пожалуйста, предоставьте примеры, чтобы определить прекращение работы приложения, когда оно находится в режиме ожидания.
В applicationWillEnterBackground
записать значение в UserDefaults
.В applicationDidEnterForeground
удалите ключ.В applicationWillFinishLaunching
ищите этот ключ.Если он там, значит, вас снова запускают, поэтому в какой-то момент вы умерли на заднем плане.Это включает в себя что-то вроде перезагрузки или сбоя питания.Если его там нет, то это первый запуск, или вы разбились на переднем плане.Точный способ реализации этого в значительной степени зависит от того, что вы планируете делать с информацией.