Таймер для запуска, когда приложение iOS переходит в фоновый режим - PullRequest
0 голосов
/ 06 ноября 2019

Я запускаю таймер в моем приложении, в течение 5 минут и 5 минут я играю звук, он работает хорошо, когда приложение находится на переднем плане,

Но когда приложение переходит в фоновый режим, таймер перестает работать,Я не хочу использовать локальные уведомления, что еще я могу сделать, чтобы это работало в фоновом режиме.

1 Ответ

0 голосов
/ 06 ноября 2019

Вы не должны решать эту проблему, устанавливая таймер, потому что вы не можете выполнять любой код в фоновом режиме. Представьте себе, что произойдет, если пользователь перезапустит свой iPhone тем временем или с некоторыми другими крайними случаями.

Используйте applicationDidEnterBackground: и applicationWillEnterForeground: методы вашего AppDelegate, чтобы получить желаемое поведение. Это намного более надежно, потому что оно также будет работать, когда ваше приложение полностью убито из-за перезагрузки или нехватки памяти.

Вы можете сэкономить время, когда таймер сработает в следующий раз, когда ваше приложение перейдет в фоновый режим, и проверитьесли вы должны принять меры, когда приложение возвращается на передний план. Также остановите и запустите таймер в этих методах. Пока ваше приложение работает, вы можете использовать таймер для запуска обновления в нужный момент.

Но вот код для фонового таймера:

var bgTask = UIBackgroundTaskIdentifier()
bgTask = UIApplication.shared.beginBackgroundTask(expirationHandler: {
    UIApplication.shared.endBackgroundTask(bgTask)
})
let timer = Timer.scheduledTimer(timeInterval: 10, target: self, selector: #selector(notificationReceived), userInfo: nil, repeats: true)
RunLoop.current.add(timer, forMode: RunLoopMode.defaultRunLoopMode)
...