#ios #swift
#iOS #swift
Вопрос:
Мое приложение прослушивает устройство Bluetooth для запуска события, когда приложение находится в фоновом режиме, а затем вызывает api. Я хочу вызвать тот же API через 1 минуту и снова вызвать этот API через 5 минут, когда приложение находится в фоновом режиме.
Комментарии:
1. Вы проверили ответ ниже?
2. да, я протестировал его, и он работает лучше, чем DispatchSourceTimer, но все же некоторое время для второго вызова требуется более 5 минут
3. Попробуйте создать 2 запроса с разной длительностью. Вы можете вызвать этот DispatchQueue
func applicationDidEnterBackground(_ application: UIApplication)
в AppDelegate4. можете ли вы предоставить мне образец кода, если это возможно?
5. я обновил ответ. Попробуйте вызвать
registerBackgroundTask(60)
в первом случае. Также вам нужно настроить блок внутри{ print("fasdf") }
с тем, что вам нужно. Также будет полезен некоторый параметр, описывающий состояние.background
Ответ №1:
Убедитесь, что вы включили фоновый режим и установили необходимые значения в xCode. Странно, но даже если фоновый режим отключен, этот код работает. Я использую этот код:
В AppDelegate добавьте код ниже:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
registerBackgroundTask(60)
return true
}
func registerBackgroundTask(_ durationSec : Double = 60 ) {
let duration : DispatchTime = DispatchTime.now() durationSec
DispatchQueue.global(qos: .background).asyncAfter(deadline: duration, qos: .background) {
print("fasdf")
// customize it!
}
}
func applicationDidEnterBackground(_ application: UIApplication) {
application.beginBackgroundTask {[weak self] in
self?.registerBackgroundTask(5 * 60)
}
}
Комментарии:
1. В настоящее время я использую этот код, но он работает несколько раз, а иногда и не работает. Любое другое решение было бы оценено.
2. Я еще не нашел никакого решения, но ваше решение сейчас очень полезно. Спасибо, брат