2011-12-09 1 views
1

웹 페이지에서 데이터를 가져 와서 UITableView에 채우는 앱이 있습니다. 홈 버튼을 누른 후 오랜 시간이 지난 후에도 내 앱이 종료되지 않습니다. 휴대 전화의 메모리가 부족하면 OS가 앱을 종료합니다. "키 추가 -> 응용 프로그램이 백그라운드에서 실행되지 않음"이 pinfo에 있습니다. 나는 앱이 언젠가 상태를 유지하기를 원한다. 우리가 - (void)applicationWillTerminate:(UIApplication *)application{} 메서드에서 타이머를 설정할 수 있는지 궁금 해서요, 앱이 1 시간 동안 비활성 상태이고 다시 시작하면 앱이 종료 될 수 있습니다.-applicationWillTerminate 메소드에서 타이머를 설정할 수 있습니까?

감사합니다.

+0

호기심에서 '응용 프로그램이 백그라운드에서 실행되지 않음'을 'YES'로 설정하는 이유는 무엇입니까? – NJones

+0

내가 말했듯이, 나는 웹 페이지에서 읽고 있는데 내 애플 리케이션이 웹 페이지에 최신 게시물을 반영하고 싶습니다. 동시에 앱을 자주 방문하면 데이터를 다시로드하지 않도록 상태를 유지하고 싶습니다. 사실 그것은 당신의 대답에서 포인트 넘버 2입니다. applicationDidEnterBackground :에 시간을 저장하려고합니다. – curious123

답변

1

앱이 백그라운드로 이동하면 추가 작업 시간 (최대 500 초까지)을 요청하여 장기 실행 작업을 완료 할 수 있습니다 (-beginBackgroundTaskWithExpirationHandler: : UIApplication 참조). 하지만 앱을 백그라운드로 종료하거나 종료 한 후 '깨우거나'다시로드하도록 예약 할 수는 없습니다.

사용자 위치를 추적하거나 수신 VOIP 전화를 받아야하는 앱에 대해서는이 규칙에 대한 예외가 있습니다. 앱이 적합한 경우 iOS 앱 프로그래밍 가이드의 Background Execution and Mutitasking 섹션을 참조하십시오.

3

간단 & 빠른 답변, 아니요. 홈 버튼을 누른 후 1 시간 동안 타이머를 실행할 수 없습니다. 할 수있는 일은 사용자가 홈 버튼을 누른 다음 앱으로 다시 전환 할 때 발생하는 호출을 숙지하는 것입니다. 당신이 YESApplication does not run in background 키를 설정하는, 또는 장치가 멀티 태스킹을 지원하지 않는 경우 (즉, 아이팟 2 세대 터치)하면

// User taps your app icon first launch 
application:didFinishLaunchingWithOptions: 
applicationDidBecomeActive: 

// User pushes home button 
applicationWillResignActive: 
applicationDidEnterBackground: 

// User selects your app again 
applicationWillEnterForeground: 
applicationDidBecomeActive: 

다음 :

이들은 (멀티 태스킹)을 받게됩니다 호출은 똑같은 동작이 이러한 메소드를 호출합니다.

// User taps your app icon first launch 
application:didFinishLaunchingWithOptions: 
applicationDidBecomeActive: 

// User pushes home button 
applicationDidEnterBackground: 
applicationWillTerminate: 

// User selects your app again 
application:didFinishLaunchingWithOptions: 
applicationDidBecomeActive: 

OS가 메모리에 대한 응용 프로그램을 죽일하기로 결정하면, 당신을 죽일 당신을 깨워하지 않습니다, 당신은 applicationWillTerminate: 전화를받을 보장되지 않습니다 유의하시기 바랍니다.

나는 당신의 질문에 대한 두 가지 동기 생각할 수 :

1) 당신은 상태를 저장하고 싶은 applicationWillTerminate:에서 그것을하고 싶어하지만, 호출되는 아니에요. 이 경우 나는 사용자가 홈 버튼을 눌렀을 때 두 경우 모두 호출되므로 applicationDidEnterBackground:에 상태를 저장하도록 제안합니다.

2) 앱이 일정 기간 동안 비활성 상태 인 경우 데이터를 다시로드하려고합니다. 이 경우 applicationDidEnterBackground: 동안 현재 시간을 저장하고 applicationDidBecomeActive:에 경과 된 시간을 확인하고 필요한 경우 다시로드하십시오.