2010-06-23 2 views
8

iPhone SDK 4가 있습니다. 이전에 작업하고 있던 앱을 개발하지 않으려합니다. 내가 시뮬레이터 4.0에서 홈 버튼을 클릭하면 그래서 모두 -(void)applicationDidEnterBackground:(UIApplication *)applicationSimulator 4.0을 실행하는 iPhone 앱이 Sigkill을 받았습니다

- (void)applicationWillTerminate:(UIApplication *)application을 구현, 괜찮아 작동하는 것 같다. 앱에서 -(void)applicationDidEnterBackground:(UIApplication *)application을 호출하고 배경 상태를 입력합니다.

그러나 홈 버튼을 두 번 클릭하면 백그라운드에서 실행중인 앱이 노출되고 마이너스 기호가 표시되거나 종료 될 때까지 길게 누릅니다. "SIGKILL"추가

, - (void)applicationWillTerminate:(UIApplication *)application가 호출되지 않습니다 : 내가 빼기 기호를 클릭하면, 디버거는

프로그램이 신호를받은 말한다. OS4에서 작동하려면이 작업을 수행해야합니까? 아니면 적어도 누군가가 SIGKILL을 디버깅하는 방법을 가르쳐 주실 수 있습니다. 감사.

답변

13

-applicationWillTerminate:은 응용 프로그램이 종료 될 때 실행 상태에있는 경우에만 호출됩니다. 이미 정지 상태에 있다면 (여기에있는 것처럼), 시스템은 단순히 응용 프로그램에 kill 신호를 보냅니다. 이것은 사용자가 빨간색 마이너스 버튼을 눌러 수동으로 응용 프로그램을 종료 할 때뿐만 아니라 시스템이 포 그라운드 응용 프로그램을위한 메모리를 확보하기 위해 응용 프로그램을 폐기하기로 결정할 때 발생합니다.

응용 프로그램이 백그라운드에서 실행 중일 때 (예 : 음악 재생 또는 일부 백그라운드 작업 실행 중) 마이너스 버튼을 눌러 응용 프로그램을 수동으로 종료하면 실제로는 -applicationWillTerminate: 메시지가 나타납니다. 따라서 모든 주/등을 저장해야합니다. -applicationDidEnterBackground:에서 돌아 오기 전에

+0

답장을 보내 주셔서 감사합니다. 말 되네. 그러나 또 다른 문제가 있습니다. -applicationDidEnterBackground :가 호출 될 때 NSUserDefaults를 사용하여 앱의 상태를 저장하려고 시도하지만 앱이 다시 시작될 때 어떤 이유로 내 값이 필요하지 않은지 알 수 없습니다. 이것이 OS4에서 작동하지 않는 이유는 무엇입니까? – NickDK

+0

Nevermind ... NSUserdefaults에서 sychronize를 호출하지 않았습니다. – NickDK

2

이것은 멀티 태스킹 바 "빨간색 닫기 버튼"이 Mac OS X에서 응용 프로그램을 강제 종료하는 것과 같습니다. 이것은 문서화 된 동작입니다. Apple은 iOS 4의 일반 사용자가 프로세스 종료 등의 측면에서 생각할 필요가없는 앱을 간단하게 실행/사용/축소 할 것으로 기대합니다. 시스템이이를 관리 할 것입니다.

중요한 데이터를 willResignActive : 또는 applicationWillEnterBackground에 저장하십시오. 그 이후로 메모리 압박으로 인해 시스템이 정리되면 강제 종료 될 수 있기 때문에 Snow Leopard는 Info.plist에서 NSSupportsSuddenTermination 키를 사용하는 응용 프로그램에 대해 비슷한 동작을 도입했습니다. 앱은 기본적으로 주기적으로 데이터를 주기적으로 저장한다는 것을 시스템에 알려주기 때문에 백그라운드로 진행될 때 또는 거의 수행 할 작업이 거의 없습니다. 큰 모 놀리 식 앱 데스크톱 앱과 달리 ...

관련 문제