applicationWillTerminate 언제 호출되고 호출되지 않을 때
안녕하세요 저는 applicationWillTerminate가 호출되고있는 것에 대한 몇 가지 질문을 읽었습니다.
다르게 말하는 여러 게시물이 있기 때문에 한 내용을 요약하고 싶었습니다.
IOS (멀티 태스킹 없음)의 경우 홈 버튼 표시 항상 호출됩니다.
IOS 4 이상
ㅏ. 그것은되는 하지 ( 백그라운드 앱 실행할 때) 홈 버튼을 누를 때 호출
비. 멀티 태스킹 도크에서 앱을 닫을 때 호출하지 않고 앱에 info.plist의 갑작스런 종료 플래그가 있기 때문에 호출하지 않습니다. ( "응용 프로그램이 앱 사망 이벤트를 가져와야합니다"를 설정 한 다음 멀티 태스킹 도크에서 앱을 닫을 때도 종료 기능이 호출되지 않음)
바탕으로 몇 가지 질문이이를
애플리케이션이 App Died 이벤트 플래그를 가져 오도록 설정하는 것이 좋은 방법입니까? ( "응용 프로그램이 앱 사망 이벤트를 가져와야합니다"를 설정 한 다음 멀티 태스킹 도크에서 앱을 닫을 때도 종료 기능이 호출되지 않음)
또는
"UIApplicationWillTerminateNotification"에 등록하는 것이 info.plist 설정보다 더 나은 방법입니까?
기본적으로 앱이 백그라운드로 엄격한 때가 종료 될 때만 몇 가지 작업을 수행해야합니다.
또는
편집 (1) : 앱이 종료되면 다음이 앱으로 전송됩니다. 어떻게 잡나요?
프로그램 수신 신호 :“SIGKILL”.
편집 (2) :
참고 : 멀티 태스킹 도크에서 제거 할 때 IOS 4 이상에서는 호출되지 않습니다. 그렇게 생각할 수도 있습니다. 하지만 제 경우에는.
이유를 아는 사람이 묻습니다. 내가 놓친 다른 서열 있습니까?
또한 "응용 프로그램이 App Died 이벤트를 가져와야합니다"를 설정 했는데도 호출되지 않았습니다.
편집 (3) :
다음 질문에 대한 답변도 작동하지 않습니다. applicationWillTerminate가 호출되지 않습니다.
나와있는 문제에 직면 한 사람이?
간단히 말해, UIApplicationExitsOnSuspend
Info.plist에서 YES로 설정 하지 않는 한 iOS4 이상에서는 applicationWillTerminate:
호출 될 보장이 없습니다 .
로 설명서를 말한다 :
백그라운드 실행을 지원하는 애플리케이션의 경우 애플리케이션이 백그라운드로 이동하기 때문에 사용자가 애플리케이션을 종료 할 때 일반적이 메소드가 호출됩니다. 그러나이 메소드 는 응용 프로그램이 백그라운드에서 실행되고 (일시 중단되지 않음) 시스템이 어떤 버전이 종료해야하는 상황에서 호출 될 수 있습니다.
(강조 광산.)
앱이 종료되기 전에해야 할 일이 applicationDidEnterBackground:
있습니다. SIGKILL을 잡을 방법이 없습니다.
-applicationWillTerminate:
다음 테스트에서 전화를받는 것을 봅니다 . 새 프로젝트 ( 'Single View Application'템플릿 사용)에서 AppDelegate에 다음을 추가합니다.
- (void)applicationDidEnterBackground:(UIApplication *)application
{
NSLog(@"%s", __PRETTY_FUNCTION__);
__block UIBackgroundTaskIdentifier identifier = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
if (identifier != UIBackgroundTaskInvalid) {
[[UIApplication sharedApplication] endBackgroundTask:identifier];
identifier = UIBackgroundTaskInvalid;
}
}];
dispatch_async(dispatch_get_main_queue(), ^{
for (int i=0; i < 20; i++) {
NSLog(@"%d", i);
sleep(1);
}
if (identifier != UIBackgroundTaskInvalid) {
[[UIApplication sharedApplication] endBackgroundTask:identifier];
identifier = UIBackgroundTaskInvalid;
}
});
}
- (void)applicationWillTerminate:(UIApplication *)application
{
NSLog(@"%s", __PRETTY_FUNCTION__);
}
이 예제는 앱이 백그라운드로 들어갈 때 백그라운드 작업을 시작합니다. 이 작업은 앱이 앱 스위처에서 종료 될 수있을만큼 충분히 오랫동안 앱이 백그라운드에서 실행되도록 유지하는 (1 초에 한 번 로깅 포함) 20 초 지연입니다.
따라서 테스트하려면 앱을 실행하고 홈 버튼을 눌러 앱을 백그라운드로 보낸 다음 20 초 지연이 시작되기 전에 앱 전환기에서 앱을 제거합니다. 20 년대 말 이후에 -applicationWillTerminate:
호출됩니다. Xcode에서 콘솔을보고 이것이 사실인지 확인할 수 있습니다.
iOS 5.1 및 6.1 (모두 iPhone) 용 iOS 시뮬레이터에서이 작업을 시도한 결과 두 경우 모두에서 발생하는 것을 확인했습니다. 또한 iOS 6.1.2를 실행하는 iPhone 4S에서 테스트 한 결과 동일한 동작을 확인했습니다.
아시다시피 귀하의 응용 프로그램이 종료되는 세 가지 상황이 있습니다.
최종 사용자에 의해 종료, 당신은 뭔가 할 수
-[UIApplication applicationWillEnterBackground:]
있으며,이 경우에,-[UIApplication applicationWillTerminate:]
호출되지 않습니다를.메모리 부족과 같은 시스템에 의해 삭제
-[UIApplication applicationWillTerminate:]
되면에서 무언가를 할 수 있습니다.이 경우applicationWillEnterBackground:
호출 되었는지 여부 를 알 수 없습니다 .충돌, 어떤 종류의 충돌보고 도구를 사용하는 것 외에는 아무것도 할 수 없습니다. (편집 : 잡기
SIGKILL
불가능)
출처 : http://www.cocos2d-iphone.org/forum/topic/7386
내 상태 저장 코드를 applicationWillTerminate에서 applicationDidEnterBackground로 복사하고 multitaskingEnabled 부울을 추가하여 applicationDidEnterBackground에서만 상태 저장을 호출하도록했습니다. 왜냐하면 applicationWillTerminate가 호출되는 멀티 태스킹 장치에는 하나의 인스턴스가 있습니다. 앱이 포 그라운드에 있고 장치의 전원을 끄는 경우. 이 경우 applicationDidEnterBackground 및 applicationWillTerminate가 모두 호출됩니다.
우리는 앱이 -applicationWillTerminate
호출 될 때 5 초 밖에 안된다는 것을 알고 있습니다. 그래서 누군가가 그 시점에서 서버를 업데이트하고 싶다면. 동기 호출을 사용하는 것보다.
[NSURLConnection sendSynchronousRequest:urlRequest returningResponse:nil error:&error];
참고 :- -applicationWillTerminate
앱이 일시 중단 상태에서 종료되면 호출되지 않습니다. 일시 중단 상태는 앱이 백 그룹에서 작동하지 않음을 의미합니다. 이에 대한 해결책 중 하나는 백그라운드 작업을 사용하는 것입니다.
// 절대 응답 applicationWillTerminate
func applicationWillTerminate (application : UIApplication) {
print("applicatoinWillTerminate")
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}
1 단계 : command + shift + h (더블 클릭 (탭))
2 단계 : 앱 위쪽으로 이동 (kill)
3 단계 : applicationWillTerminate 작업
참고 URL : https://stackoverflow.com/questions/7818045/applicationwillterminate-when-is-it-called-and-when-not
'ProgramingTip' 카테고리의 다른 글
실시간 공동 편집-어떻게 작동 작동? (0) | 2020.11.28 |
---|---|
Java Primitives 범위 계산 (0) | 2020.11.28 |
모든 DOM 요소를 반복하는 가장 효율적인 방법? (0) | 2020.11.28 |
Twitter 부트 유효성 3- 사용자 지정 글 리피 콘을 만들고 글 리피 "글꼴"에 추가 (0) | 2020.11.28 |
node.js에서 process.env를 스텁하는 방법은 무엇입니까? (0) | 2020.11.28 |