2010-12-31 5 views
4

내가 봤는데"UIBackgroundTaskInvalid"는 무엇을 의미합니까?

http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html#//apple_ref/doc/uid/TP40007072-CH5

그런 다음 URL에서 애플에 의해 쓰여진 "백그라운드에서 유한 길이 작업 완료"배경 (iOS4)에서 실행 아이폰 애플 리케이션을 개발하고, 참조하고 있습니다 백그라운드 작업을 구현할 수 있습니다. (물론 응용 프로그램에는 10 분 제한 시간이 있습니다.) 그러나 "bgTask = UIBackgroundTaskInvalid;"(목록 4-2의 Line7,16)이 의미하는 바는 아직도 이해할 수 없습니다.

내 의견으로는, 위에 표시된 행에 도달 한 적이 없습니다. 그 전에 "endBackgroundTask:"이 있기 때문에 백그라운드 작업이 종료됩니다. 실제로 xcode 디버거로 검사했을 때이 생각은 사실 일 수 있으며 Line7, 16에 도달하지 않을 수 있습니다.

그렇다면이 행은 중복됩니까? 작성해야 할 이유가 있습니까?

이 문제에 대해 도움을 주셔서 감사합니다. 미리 감사드립니다.

답변

10

응용 프로그램이 백그라운드 작업을 완료하기 전에 10 분이 다되면 블록의 코드가 호출됩니다.

이 블록의 코드는 신청서가 승인되고 승인됨을 나타 내기 위해 endBackground:으로 전화해야합니다. 그렇지 않으면 신청서가 종료됩니다. 이 메서드를 호출해도 응용 프로그램이 종료되지는 않으며 단순히 백그라운드 작업 실행이 완료되었음을 OS에 알립니다.

두 번째 줄은 단순히 더 이상 존재하지 않는 작업의 ID를 설정하지 않고 bgTask을 중립 값으로 다시 설정하는 것입니다. 필수적인 것보다는 깔끔한 것입니다.

(배경 실행이 끝나면 응용 프로그램이 실행될 때까지 두 번째 줄이 실행되지 않으면 놀라지 않을 것입니다. 응용 프로그램이 실행될 CPU 시간을 얻지 못하기 때문에. 그것을 이해하는)

0

키 대신 완료 처리기를 가진 당신은 만료 핸들러를 가지고있다. 이 코드는 toooo long을 사용하는 코드의 '정리'로만 실행됩니다.

클린업하려면 백그라운드 작업을 중단/종료/종료해야합니다. 그래서 먼저 다음과 같이 중지해야합니다.

[application endBackgroundTask:bgTask]; 

그런 다음 다시 실행되지 않도록 작업에 플래그를 설정합니다.

bgTask = UIBackgroundTaskInvalid; 

당신이 코드에서 두 번 볼 수있는 이유는 때문에 중 하나

  • 당신이 알려해야합니다 있도록이 성공적으로 백그라운드에서 실행하고 ... 디스패치 블록에 완료됩니다 어이, 끝났어.
  • 은 백그라운드에서을 마칩니다. 가야 해.~을 통해 자신을 정리하십시오. [application endBackgroundTask:bgTask]; + bgTask = UIBackgroundTaskInvalid;