이것은 startMonitoringSignificantLocationChanges 를 사용한 앱 동작을 설명하는 CLLocationManager 문서 의 섹션입니다 .
이 서비스를 시작하고 응용 프로그램이 이후에 종료되면 새 이벤트가 도착하면 시스템이 자동으로 응용 프로그램을 백그라운드로 다시 시작합니다. 이 경우 애플리케이션 델리게이트의 application : didFinishLaunchingWithOptions : 메소드에 전달 된 옵션 사전에는 위치 이벤트로 인해 애플리케이션이 시작되었음을 나타내는 UIApplicationLaunchOptionsLocationKey 키가 포함됩니다. 다시 시작할 때 위치 관리자 개체를 구성하고이 메서드를 호출하여 위치 이벤트를 계속 수신해야합니다. 위치 서비스를 다시 시작하면 현재 이벤트가 즉시 대리인에게 전달됩니다. 또한 위치 관리자 개체의 위치 속성은 위치 서비스를 시작하기 전에도 가장 최근 위치 개체로 채워집니다.
나의 이해는 앱 종료가 (당신이 전화를하지 않으면 내가 생각하는 경우이다 그래서 stopMonitoringSignificantLocationChanges을 에서 applicationWillTerminate ) 당신이 함께 깨어 얻을 것이다 UIApplicationLaunchOptionsLocationKey의 에 매개 변수 didFinishLaunchingWithOptions : 응용 프로그램 . 이 시점에서 CLLocationManager 를 만들고 startMonitoringSignificantLocationChanges를 호출 하고 제한된 시간 동안 백그라운드 위치 처리를 수행합니다 . 그래서 나는이 비트로 괜찮습니다.
이전 단락에서는 앱이 종료 될 때 발생하는 일에 대해서만 설명하고 애플리케이션이 일시 중지되었을 때 수행하는 작업을 제안하지 않습니다. didFinishLaunchingWithOptions에 대한 문서 는 다음과 같습니다.
응용 프로그램은 백그라운드에서 위치 업데이트를 추적하고 제거되었으며 이제 다시 시작되었습니다. 이 경우 사전에는 새 위치 이벤트로 인해 응용 프로그램이 다시 시작되었음을 나타내는 키가 포함되어 있습니다.
앱이 종료 된 후 (위치 변경으로 인해) 앱이 실행될 때만이 전화를받을 것을 제안합니다.
그러나 위치 인식 프로그래밍 가이드 의 중요한 변경 서비스 에 대한 단락 에는 다음과 같은 내용이 있습니다.
이 서비스를 계속 실행하고 애플리케이션이 이후에 일시 중단되거나 종료되면 새 위치 데이터가 도착하면 서비스가 자동으로 애플리케이션을 깨 웁니다. 깨어 나면 애플리케이션이 백그라운드에 배치되고 위치 데이터를 처리하는 데 약간의 시간이 주어집니다. 애플리케이션이 백그라운드에 있기 때문에 최소한의 작업을 수행하고 할당 된 시간이 만료되기 전에 반환을 방해 할 수있는 모든 작업 (예 : 네트워크 쿼리)을 피해야합니다. 그렇지 않으면 응용 프로그램이 종료 될 수 있습니다.
이는 앱이 일시 중지 된 경우 위치 데이터로 깨어 났음을 의미하지만 어떻게 깨어 났는지 언급하지 않습니다.
- 않습니다 UIApplicationDelegate은 내가 배경 상태로 일시 중단 된 상태에서 다시 시작하고 있음을 말해 콜백을 얻을?
- 위치 관리자 (앱이 일시 중지되었을 때 동결 건조 됨)가 locationManager : didUpdateToLocation : fromLocation 콜백을 받기 시작 합니까?
- 애플리케이션 상태를 확인하고 백그라운드 모드 인 경우 최소한의 처리 를 수행하는 내 didUpdateToLocation 메시지에 코드를 구현해야 합니까?
이 글을 작성하는 과정에서 제 질문에 방금 답한 것 같지만 더 많은 지식을 가진 사람이 이에 대한 이해를 확인하면 좋을 것입니다.