Если у меня включены службы определения местоположения, то как можно убить мое приложение, когда оно переходит в фоновый режим? - PullRequest
0 голосов
/ 29 сентября 2018

Мое приложение убивается, когда оно в фоновом режиме.

Однако мое приложение постоянно поддерживается в фоновом режиме для целей 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)
    }
}

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

1 Ответ

0 голосов
/ 18 октября 2018

В написанном коде возникла проблема.

Это происходило только тогда, когда пользователь вносил изменения в настройки местоположения (разрешения) приложения.По-видимому, это был путь, против которого тестирование не проводилось!

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