2015-05-30 5 views
3

В HealthKit вы создаете HKObserverQuery, выполните его, а затем включитеBackgroundDeliveryForType.Does disableBackgroundDeliveryForType удалить соответствующий HKObserverQuery?

let backgroundQuery:HKObserverQuery = HKObserverQuery(sampleType: quantityType, predicate: nil) { (query, complete, error) -> Void in 
} 
self.healthKitStore.executeQuery(backgroundQuery) 

self.healthKitStore.enableBackgroundDeliveryForType(
     quantityType, 
     frequency: .Immediate, 
     withCompletion: { (success, error) -> Void in 
      if !success { 
       println(error) 
      } 
    }) 

Я интересно, если я позвоню disableBackgroundDeliveryForType это будет просто отключить зарегистрированный HKObserverQuery или он будет также удалить его?

ответ

5

Отключение доставки фона не остановит запрос наблюдателя. Это только предотвращает возобновление вашего приложения в фоновом режиме, чтобы получать информацию о новых образцах. Когда ваше приложение находится на переднем плане, ваш запрос пользователя updateHandler будет продолжать выполняться при появлении новых данных. Вы должны позвонить HKHealthStore.stopQuery(backgroundQuery), чтобы остановить его.

+0

Аллан, какова продолжительность жизни HKObserverQuery? Когда его следует остановить и воссоздать? – julio

+0

Срок службы до тех пор, пока вы этого хотите. После его запуска он запускается до тех пор, пока вы явно не остановите его или ваше приложение не выйдет. Вы должны явно останавливать его, когда вам больше не нужны обновления, которые он предоставляет. – Allan

+1

Спасибо, что хорошо знать, еще один вопрос: поэтому, когда мое приложение запускается при доставке фона после его завершения, и я воссоздаю свой запрос наблюдателя в applicationDidFinishLaunchingWithOptions. Любые идеи о том, почему после того, как пользователь снова откроет приложение вручную, updateHandler получает количество раз, подобное количеству раз, когда мое приложение было запущено в фоновом режиме? – julio