Длительная фоновая задача не работает должным образом в iOS 13 - PullRequest
0 голосов
/ 11 октября 2019

У меня есть длительное фоновое задание по поиску похожих изображений в устройстве. Я реализовал код с очередью операций и назначил его QoS для фона. Иногда он работает отлично, а иногда нет.

photoScanningOperationQueue.name = "photo_scanning"
photoScanningOperationQueue.maxConcurrentOperationCount = 1
photoScanningOperationQueue.qualityOfService = .background
photoScanningOperationQueue.underlyingQueue = .global(qos: .background)

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

assertion's invalidation time is in the past

Я использовал приведенный ниже код для выполнения долгосрочной фоновой задачи

extension DuplicatePhotoFinderVC {
    func setupBackgrounding() {
        NotificationCenter.default.removeObserver(self, name: UIApplication.didEnterBackgroundNotification, object: nil)
        NotificationCenter.default.removeObserver(self, name: UIApplication.willEnterForegroundNotification, object: nil)
        NotificationCenter.default.addObserver(self, selector: #selector(appBackgrounding(_:)), name: UIApplication.didEnterBackgroundNotification, object: nil)
        NotificationCenter.default.addObserver(self, selector: #selector(appForegrounding(_:)), name: UIApplication.willEnterForegroundNotification, object: nil)
    }

    @objc func appBackgrounding(_ notification: Notification?) {
        keepAlive()
    }

    @objc func keepAlive() {
        timer?.invalidate()
        timer = nil
        backgroundTask = UIApplication.shared.beginBackgroundTask(expirationHandler: {
            UIApplication.shared.endBackgroundTask(self.backgroundTask)
            self.backgroundTask = UIBackgroundTaskIdentifier.invalid
            if self.photoScanningOperationQueue.operationCount > 0 {
                self.keepAlive()
            }
        })
    }
}

В методе viewDidLoadЯ вызвал setupBackgrounding (). Я не уверен, что вызывает эту проблему. Я пытался отладить в течение 2 дней, и я не могу найти основную причину или решение моей проблемы. Если вы сможете определить проблему и дать решение, она будет очень признательна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...