2012-08-12 2 views
0

실행 중에 작성한 이상한 동작을보고 디버그 파일을 조사했습니다. 응용 프로그램에서 NSURLConnction을 사용하여 서버에서 일부 데이터를 검색합니다. 연결이 시작된 다음 홈 버튼 (application:willResignActiveapplication:didEnterBackground 메서드가 호출 됨)을 눌러 응용 프로그램을 백그라운드로 이동할 수있었습니다. application:didEnterBackground이 호출 된 후 연결이 코드에서 처리 된 것을 볼 수 있습니다. (connectionDidFinishLoadingNSURLConnection 대리인은 application:didEnterBackground 다음에 호출되었습니다.) connectionDidFinishLoading의 구현에서 일부 작업을 수행하지만이 시점에서 응용 프로그램이 일시 중단되고 코드가 호출되지 않았습니다. 그런 다음 거의 12 시간 동안 사용자가 응용 프로그램을 다시 시작한 후 (종료되지 않았지만 백그라운드에만 있음) 코드는 application:willEnterForegroundapplication:didBecomeActive이 호출되기 전에 중단 된 동일한 지점에서 계속 실행되었습니다. 장면을 만드나요? 응용 프로그램을 포 그라운드로 입력하기 전에 실행중인 코드 부분이 내 응용 프로그램 내부 상태를 변경하여 이상한 동작을 일으 킵니다.응용 프로그램이 백그라운드로 들어간 후 네트워크 작업을 계속 수행합니까?

어떻게 해결할 수 있습니까?

답변

0

application:didEnterBackground을받은 후에는 약 5 초 내에 마무리 작업을 수행 한 후 더 이상 응용 프로그램이 CPU에서 예약되지 않습니다.

귀하의 경우 가장 좋은 해결책은 beginBackgroundTaskWithExpirationHandler:을 통해 백그라운드 작업의 시작을 알리고 다운로드 및 관련 작업을 완료하는 것입니다.

+0

답변 해 주셔서 감사합니다. 연결이 매우 짧아서 응용 프로그램의 5 초 제한 인 didEnterBackground 전에 종료되었습니다. 디버그 파일에서 didEnterBackground가 호출 된 것을 볼 수 있습니다. 그런 다음 몇 밀리 초 후에 연결이 종료되었습니다 (didFinishLoading이 호출되었습니다) – user1513930