Не вызывать didBecomeActive, если фоновая задача истекает
Вот ситуация:
Я выбираю большое видео с помощью imagepicker. Очевидно, что сборщик займет немного времени, чтобы сжать видео. Таким образом, чтобы облегчить работу с пользователем, я включил фоновую задачу для него.
Теперь возникает вопрос:
Если пользователь выбирает видео и нажимает кнопку "домой", приложение переходит в фоновый режим и продолжает сжимать видео в течение следующих 600 секунд. И фоновая задача истекает. В обработчике истечения срока действия я остановил фоновое задание.
Теперь, если пользователь возобновляет приложение после истечения срока действия фона
- (void)applicationDidBecomeActive:(UIApplication *)application
не вызывается. Может ли кто-нибудь объяснить мне, почему это происходит?
Ответы
Ответ 1
Когда фоновые задачи истекают, ваше приложение действительно будет закрыто! Поэтому он не становится активным снова, он запускается.
Вы должны обрабатывать вещи в своем обработчике истечения срока действия или/и когда ваша фоновая задача завершается успешно. В обеих ситуациях вам нужно установить background_task как недействительным.
Если ваше приложение переходит в фоновый режим при конвертировании видео, а затем пользователь открывает его снова. Перед завершением задачи или фоновой задачи вы должны увидеть приложение, вызывающее applicationDidBecomeActive.
Я предполагаю, что вы это знаете, но, возможно, вам не хватает свойств многозадачности в вашем файле Info.plist, поэтому ваше приложение не принимает фоновые задачи так, как вы ожидаете.
Ответ 2
- (void) applicationDidBecomeActive: (UIApplication) приложение
Этот метод Вызывается только при изменении состояния приложения из неактивного состояния в активное состояние.
Можно ли узнать, закончилась ли сборка видео? если возможно, просто сохраните его. и когда пользователь снова приходит в приложение. просто запустите необходимые функции.
Ответ 3
Не могли бы вы попытаться добавить оператор журнала к методу applicationDidFinishLaunching
? Может быть, приложение завершается или сбой, прежде чем пользователь откроет его.
Кроме того, я считаю, что правильным способом является сохранение текущего контекста синтаксического анализа, когда приложение получает сигнал типа applicationDidFinishLaunching
и когда приложение начинает возобновление разбора. Поскольку пользователь может закрыть приложение вручную.