Я знаю, что когда вы запускаете приложение в фоновом режиме, таймер перестает работать. Однако каково поведение, когда вы возвращаетесь с заднего плана? Сохраняет ли таймер исходное значение fireDate
?
Я столкнулся с небольшой проблемой, когда после возвращения из фона с NSTimer, настроенным на срабатывание через десять минут, иногда у меня сразу же срабатывает таймер еще до того, как applicationWillEnterForeground:
будет вызван. Когда он не срабатывает и вызывается applicationWillEnterForeground:
, у меня есть некоторая логика, чтобы проверить, прошли ли 10 минут, сравнивая fireDate
таймера с текущей датой, однако, даже если прошло 10 минут, это всегда дает мне значение около 525 секунд в будущем от текущей даты.
Моя теория следующая:
NSTimer
запустит таймер при возвращении из фонового режима, если вы не пропустите запланированное время больше, чем было запланировано изначально. (В этом случае мы устанавливаем таймер на 10 минут, если вы находитесь в фоновом режиме в течение 10-20 минут, он сработает при повторном входе в приложение.)Если прошло больше, он не срабатывает, а вместо этого назначает другой таймер на тот же период времени в будущем, когда вы вернетесь. (AKA. Если вы были в фоновом режиме более 20 минут с 10-минутным таймером, когда вы вернетесь, он запланирует таймер на 10 минут в будущем с момента вашего возвращения в приложение.)
У кого-нибудь есть документация по этому поведению? Мои теории основаны исключительно на наблюдениях, документации о том, что происходит при фоновом режиме, либо катастрофически не хватает, либо я не смог ее найти.