Я в настоящее время разрабатываю приложение в iOS 13.
Приложение подключается к устройству Bluetooth и обменивается данными с ним. Когда пользователь закрывает соединение с устройством Bluetooth (или отключает Bluetooth или закрывает приложение), мне нужно отслеживать, когда соединение заканчивается, и пару информации. Эти данные необходимо отправить на сервер, поэтому я сохраняю данные в локальной таблице sqlite и затем пытаюсь отправить их, если доступно inte rnet.
Вот проблема: я использую RxSwift
, чтобы сделать такой вызов в своем приложении, и я не уверен, как реализовать beginBackgroundTaskWithExpirationHandler
, правильно завершив задачу и избегая многократного вызова (чтобы избежать отправки) несколько раз одни и те же данные, я должен убедиться, что выполняется ОДНА задача).
Моя текущая реализация выглядит так:
func SendData() {
if(backgroundTaskID != .invalid) {
return
}
backgroundTaskID = UIApplication.shared.beginBackgroundTask(withName: TaskIdentifier ) { [weak self] in
guard let self = self else {
return
}
if(self.backgroundTaskID != .invalid){
UIApplication.shared.endBackgroundTask(self.backgroundTaskID)
self.backgroundTaskID = .invalid
}
}
//create the observable with the data need to be send
remoteObservable.subscribe(onNext: {[weak self] (_) in
guard let self = self else {
return
}
if(self.backgroundTaskID == .invalid) {
return
}
UIApplication.shared.endBackgroundTask(self.backgroundTaskID)
}).disposed(by:disposeBag)
}
Это правильный способ ее реализации?