iOS : HKObserverQuery의 백그라운드 업데이트 완료 사용
HKObserverQuery
백그라운드에서 업데이트 수신을 지원하는 다음 메소드가 있습니다.
- initWithSampleType:predicate:updateHandler:
는 updateHandler
가 completionHandler
다음 가지고있는 문서를 :
이 블록은 업데이트로 전달됩니다. 수신 데이터 처리를 완료 하자마자이 블록을 호출해야합니다. 이 블록을 호출하면 HealthKit이 백그라운드 데이터를 수신했음을 알립니다. 이 블록을 호출하지 않는 라이선스 HealthKit은 백 오프 알고리즘을 사용하여 앱 실행을 계속 시도합니다. 앱이 세 번 응답하지 않는 HealthKit은 앱이 데이터를 수신 할 수 있습니다 가정하고 백그라운드 업데이트 전송을 중지합니다.
다른 게시물을 보면이를 둘러싼 많은 혼란이있는 것입니다. 다음은 이에 대한 몇 가지 질문입니다.
- 어디에서 호출해야합니까? 너무 늦게 호출하면 HK는 앱이 쿼리 업데이트를 수신하지 않아 백그라운드 업데이트 3 스트라이크 백 알고리즘에 접근 할 수 있습니다. 문서에는 다른 쿼리를 처리 한 후에 작성해야합니다. 쿼리를 실행하는 데 오랜 시간에 따라 백그라운드 업데이트 경고에 매우 가까워 질 수 있습니다.
- 왜 이것이 필요한가요? 시스템이 앱이 시작해도 업데이트를 받았다는 것을 알고하지 않았습니까?
CoreBluetooth
백그라운드에서 사용 하는 경우 앱이 백그라운드에서 10 초 동안 깨어납니다. 백그라운드를 호출 백그라운드 업데이트 3 스트라이크를 처리 할 필요가 없습니다. - 백그라운드 업데이트 3 스트라이크를 치면 HK가 업데이트 전송을 중지하면? HK가 백그라운드 업데이트를 다시 시작하면? 호출을 방해하는 버그가 있고 이제 수정 전화 어떨까요? 앱이 멈춰서 업데이트를받지 못하나요? 또는 앱을 다시 시작하거나 업데이트 할 때 유효성을 다시 시작합니까?
- HK는 계속 호출 될 때까지 앱을 백그라운드에서 계속 실행될 때? 그것은 목적의 일부 부작용입니까? 목적의 일부인 경우 중지 (그리고 첫 번째 백그라운드 업데이트 경고에 도달) 전에 얼마나 오래 달릴 수 있습니까?
어디에서 호출해야합니까?
일을 마친 후에 전화하십시오. 코드는 복잡한 작업을 수행 할 수 있습니다. 앱이 백그라운드에 주요 사용자는 변경된 사항을 볼 수 없습니다. 데이터가 업데이트되고 사용자가 앱을 "플래그"를 수행 할 수 있습니다. 사용자에게 알리거나 복잡한 작업을 기반으로하지 않기로 결정한 경우 모든 데이터가 미리 계산되고 (예 : UserDefaults에서) 추가 데이터를 해당 데이터로 간단히 가져옵니다. 따라서 계산에는 1-2 초면 충분합니다.
왜 이것이 필요한가요?
모든 것이 완벽합니다. iOS에서 앱이 제대로 작동하는지 알기 위해 필요합니다. 앱이 CPU 시간을 너무 많이 먹으면 iOS가 느려질 수 있습니다. 따라서 Apple은 나쁜 앱에도 불구하고 iOS가 제대로 작동하는지 확인하기를 원합니다.
백그라운드 업데이트 3 스트라이크를 치면 HK가 업데이트 전송을 중지하면?
아니.
HK가 백그라운드 업데이트를 다시 시작하면?
예. 그러나 그것은 많은 존재에 달려 있습니다. 1 ~ 2 일 후에 앱 호출을 다시 시도 할 수 있습니다. 아무것도 변경되지 않은 거의 호출하지 않습니다.
HK는 계속 호출 될 때까지 앱을 백그라운드에서 계속 실행 실행합니까?
이 알 수 없습니다. 그것은 많은 곳에 달려 있습니다. 아마도 iPhone이 충전 중이면 완료 핸들이 호출 여부를 추정하기 위해 앱을 더 오래 사용할 수 있습니다. iPhone이 충전되지 않고 배터리가 0 %로 닫혀 있으면 iOS가 앱을 종료 할 가능성이 있습니다. 완료 완료 호출 한 후에는 어떤 작업도 수행 할 수 있습니다. 그리고 그것을 단순하게 유지하십시오.
권장 사항
새 데이터는 가능한 한 빨리 처리해야합니다. 많은 데이터를 가져와야하는 경우에 최적화하고 앱이 포 그라운드에있을 때 미리 계산 한 다음 어딘가에 저장 (UserDefault)하고 캐시 된 데이터와 함께 새 데이터를 사용하여 결정을 내립니다 (예 : 뭔가; 나는 당신이 정확히 위해 배경 업데이트가 필요하다고 생각합니다).
백그라운드 업데이트에는 1-2 초 이하가 적합합니다.
'ProgramingTip' 카테고리의 다른 글
Android에서 개발하는 데 사용할 수있는 프로그래밍 언어는 무엇입니까? (0) | 2020.12.09 |
---|---|
스캐너가 next () 또는 nextFoo ()를 후 nextLine ()을 건너 뛰나요? (0) | 2020.12.09 |
구체적인 구현이있는 추상 클래스를 스텁하지 않도록 Pex에 지시하는 방법 (0) | 2020.12.09 |
경고 : Visual Paradigm에서 코드 생성에 사용할 수있는 클래스 모델이 없습니다. (0) | 2020.12.09 |
더 많은 iCloud Core 데이터 동기화 문제 (0) | 2020.12.09 |