iOS приложение будет убито в фоновом режиме, если потратить больше 30 секунд, iOS 13 в основном - PullRequest
0 голосов
/ 16 марта 2020

У меня есть приложение iOS, которое использует информацию CoreLocation и WiFi SSID. Мое приложение работало нормально, пока не пришло iOS 13, но с тех пор оно вызывает у меня много проблем, особенно когда приложение работает в фоновом режиме. Я использовал один таймер в фоновом режиме в качестве фоновой задачи, которая также не работает через 30 секунд, и особенно приложение было убито в фоновом режиме в тот же период времени. Я видел, как некоторые люди говорили, что iOS 13 был строгим для фоновых задач и сроков, но я до сих пор не нашел прямых ссылок или ссылок от Apple, которые бы поддерживали эти утверждения. Кто-нибудь еще сталкивается с такими же проблемами, пожалуйста, поделитесь своими мыслями. Спасибо

У меня есть одна фоновая задача для таймера:

  var bgTask: UIBackgroundTaskIdentifier?
  var updateTimer: Timer?

  func applicationDidEnterBackground(_ application: UIApplication) {

    bgTask = application.beginBackgroundTask(withName: "MyTask", expirationHandler: {() -> Void in

       if let bgTask = self.bgTask {

       application.endBackgroundTask(bgTask)
       self.bgTask = UIBackgroundTaskIdentifier(rawValue: convertFromUIBackgroundTaskIdentifier(UIBackgroundTaskIdentifier.invalid))

       }

    })

    DispatchQueue.main.async(execute: {() -> Void in

        self.updateTimer = Timer.scheduledTimer(timeInterval: 2.0, target: self, selector: #selector(self.checkNetworkStatus), userInfo: nil, repeats: true)

    })

  }

 @objc func checkNetworkStatus() {
    print("Timer calledddd")
 }

1 Ответ

2 голосов
/ 16 марта 2020

Имя фоновой задачи несколько неуместно.

В частности, beginBackgroundTask(expirationHandler:) фактически не запускает какую-либо фоновую задачу, а скорее сообщает системе, что вы начали какую-то текущую работу, которую хотите продолжить, даже если ваше приложение находится в фоновом режиме.

Вам все еще нужно написать код для создания и управления этой работой.

Поэтому лучше всего рассматривать API фоновых задач как выражение «не приостанавливать меня».

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

iOS 13 уменьшило значение от переднего плана до 30 секунд.

a. 3 минуты, когда ваше приложение переместилось с переднего плана на фон

b. 30 секунд, когда ваше приложение было возобновлено в фоновом режиме

Вы можете получить приблизительную оценку количества времени, доступного вам, просмотрев свойство UIApplication() backgroundTimeRemaining.

Дополнительная информация здесь и здесь .

Вы можете использовать другой API для достижения ваших целей.

...