0

사용자를 추적 할 수있는 백그라운드 모드에서 실행되는 응용 프로그램을 작성하고 (지역 모드에서 위치를 업데이트하기도 함) 지역 모니터링을 사용하여 주변 지점을 알려줍니다. 지역 모니터링에서 응용 프로그램을 다시 시작하는 기능을 사용하지 않습니다.applicationDillEnterBackground after background 위치 모드를 사용하는 응용 프로그램의 경우

현재 applicationWillTerminate: 메시지를받은 후 위치 업데이트를 중지하고 영역 모니터링에서 모든 지점을 제거합니다. 응용 프로그램의 이상한 동작을 발견했습니다. (아래 같은 순서대로) 다음과 같은 메시지는 멀티 태스킹 메뉴를 죽이려 후 응용 프로그램에 전달됩니다

  • applicationWillTerminate:
  • applicationDidEnterBackground:
  • (때로는) 한 번 더 locationManager:didUpdateToLocation:fromLocation:

하는 경우 이 응용 프로그램의 백그라운드 위치 모드를 등록하지 않아 대신 그냥 죽입니다.

사용자가 멀티 태스킹 메뉴에서 응용 프로그램을 종료하고 영역 모니터링에서 메시지를 가져 오지 않으면 응용 프로그램을 종료하고 싶습니다 (아무런 시점도 추적하지 않습니다). 그래도 배경 위치 모드를 사용할 수 있어야합니다. 그 목적은 배터리 사용을 최소화하는 것입니다. 그것을 성취하기 위해 무엇을해야합니까?

또한 applicationWillTerminate: 이후에 응용 프로그램에 applicationDidEnterBackground:이 수신되는 이유는 무엇입니까? 멀티 태스킹 메뉴에서 종료 한 후에도 계속 실행 중이십니까?

답변

2

결국 나는 그것을 실험적으로 테스트하고 문서에서 다룬 내용이 모두 사실인지 확인했습니다. 그것은 보인다.

응용 프로그램이 location 같은 UIBackgroundModes를 지원하지 않는 경우

, 그것은 살해 (신호 (9)를 수신) 멀티 태스킹 메뉴를 종료 한 후 ( applicationWillTerminate:를받은 후) : 사람들은 완전히 문서에 지정되지 않은 결과입니다.

응용 프로그램이 location 백그라운드 모드를 지원하는 경우 applicationWillTerminate:, applicationDidEnterBackground:을 받고 일시 중단됩니다. 응용 프로그램을 다음에 실행하기 전에 자동으로 종료됩니다.

멀티 태스킹 메뉴에서 응용 프로그램의 영역을 모니터링 중이며이 영역 이벤트가 UIApplicationLaunchOptionsLocationKey 옵션으로 다시 시작됩니다. 그 이후에 사용자가 응용 프로그램을 시작하면 종료되지 않고 단순히 applicationDidBecomeActive: 및 기타 메시지를 받기 시작합니다.

applicationWillTerminate: 방법으로 모든 지역 모니터링을 중지하면 예상대로 응용 프로그램이 종료 된 후에 배터리가 소모되지 않습니다.하지만 지역 모니터링을 중단하지 않고 높은 지역 모니터링 정확도를 설정했다면 iOS가 적극적으로 해당 지점을 모니터링하고 있기 때문에 종료 된 경우에도 많은 배터리가 소모됩니다.

종료 후 백그라운드 위치 설정 모드로 응용 프로그램의 동작은 영역 모니터링 여부에 관계없이 실제로 동일합니다. 첫 번째 경우에만 지역에 들어가거나 배터리를 소모하는 것에 관한 메시지를받지 못합니다.

0

알림은 항상 응용 프로그램의 종료 프로세스의 일부로 전송되기 때문에 항상 알림을 수신합니다 (따라서 해당 메소드를 입력합니다). 그리고 예. 해당 메소드가 실행될 때 응용 프로그램이 계속 실행 중이지만 applicationWillTerminate 메소드가 끝난 후에는 더 이상 실행되지 않습니다.

나는 당신이 달성하려고하는 것을 이해한다면 applicationDidEnterBackground : 방법의 요구 사항에 따라 모니터링을 중지해야합니다.

희망이 있습니다.

+0

문제는 응용 프로그램이'applicationWillTerminate :'다음에 실행된다는 것입니다. 그 후에,'applicationDidEnterBackground :'가 호출됩니다. 문제는 그것이 (언제까지) 죽었을 때입니다. 또한 사용자가 응용 프로그램을 "종료"하면 영역 모니터링을 중지하고 싶기 때문에'applicationDidEnterBackground :'에서 수행 할 수 없습니다. – Xilexio

+0

iOS 4.0 이상의 문서에 따르면 applicationDidEnterBackground 뒤에 애플리케이션이 삭제됩니다. http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIApplicationDelegate_Protocol/Reference/Reference .html –

+0

'applicationDidEnterBackground :'다음에 응용 프로그램이 종료 될 수 있음을 나타냅니다. 예를 들어, 지역 모니터링을 사용한다면,'application : didFinishLaunchingWithOptions :'옵션과'UIApplicationLaunchOptionsLocationKey' 옵션을 가지고 실행될 것입니다. 지역의 경계선을 넘을 때 응용 프로그램을 깨우는 기능을 사용하지 않기 때문에 폐쇄되거나 최소한 배터리를 사용하지 않을 것으로 기대됩니다. 하지만 시스템 콘솔 앱에서 확인한 것처럼 배경 모드가 설정되지 않은 상태에서 kill (9) 신호가 내 앱에 전송되지 않고 종료됩니다. – Xilexio