Мое приложение убивается, когда оно в фоновом режиме.
Однако мое приложение постоянно поддерживается в фоновом режиме для целей locationTracking.
Я говорил с пользователями, которые столкнулись с этой проблемой, и они говорят, что их locationTracking установлен на Always, и они не выключили его.
Я предполагаю, что даже если приложение находится в фоновом режиме (не приостановлено), оно все равно может быть выгружено из памяти из-за предупреждения о наличии памяти.
Мой вопрос, кроме memory , есть ли другая причина?Я просмотрел документы Apple и понял, что это может быть связано с тем, что процессор в фоновом режиме работает более + 1% в течение более 1 минуты, но этого не происходит.Я знаю, что сбои также могут быть причиной повторного запуска приложения, но наши сбои не увеличились.Мы не видим сбоев в нашем классе locationManager, и единственное, что мы делаем в фоновом режиме, это отслеживание местоположения и выполнение вызова API.
Единственное, что я недавно добавил в свой класс locationManager
, - это дополнительная проверка:
private func checkLocationAccuracy(from location: CLLocation) throws {
let ageOfLocation = -location.timestamp.timeIntervalSinceNow
if ageOfLocation >= maximumAcceptedStale {
throw LocationAccuracyError.stale(secondsOld: ageOfLocation)
}
if location.horizontalAccuracy <= 0 {
throw LocationAccuracyError.invalid
}
if location.horizontalAccuracy > MaximumAcceptedHorizontalAccuracy{
throw LocationAccuracyError.lowAccuracy(metersOff: location.horizontalAccuracy)
}
}
Если выдается ошибка, я просто регистрирую ее.В противном случае я просто звоню по сети.Эта дополнительная проверка уменьшит сетевые вызовы, поэтому я предполагаю, что она должна быть более эффективной с точки зрения энергопотребления.