NSTimers работает в фоновом режиме? - PullRequest
13 голосов
/ 05 мая 2011

У меня сложилось впечатление, что NSTimer вообще не работает после вызова приложения applicationWillResignActive.Мне кажется, однако, что существующие NSTimers (т. Е. Созданные до того, как приложение оставило активным) будут продолжать работать, и это только новые NSTimers, которые не могут быть запланированы в этом состоянии. Может ли кто-нибудь это подтвердить?

Я также предполагаючто это хорошо (и Apple, кажется, тоже так говорит), что когда ваше приложение вызывает applicationWillResignActive, вы должны отключить все NSTimers и запустить их снова при вызове applicationDidBecomeActive, имеет ли это смысл?

1 Ответ

20 голосов
/ 05 мая 2011

Когда приложение неактивно, но все еще находится на переднем плане (например, когда пользователь получает push-уведомление или нажимает кнопку режима ожидания), ваше приложение все еще работает полностью.Все созданные вами таймеры, которые вы не остановите, сработают как обычно.Однако, когда ваше приложение переходит в фоновый режим, если вы не зарегистрированы для запуска фонового потока, все выполнение останавливается.Если пора запустить таймер, этого не произойдет, потому что цикл выполнения не работает.Однако при повторном открытии приложения все таймеры, которые должны были срабатывать в фоновом режиме, немедленно запускаются.Apple предлагает выполнить очистку в applicationWillResignActive, чтобы вы не выполняли большую работу, когда пользователь не сфокусирован на вашем приложении, но вы определенно хотите отключить таймеры перед переходом в фоновый режим, чтобы они не запускались один раз последругой при повторном открытии приложения.

...