applicationWillEnterForeground 및 applicationDidBecomeActive, applicationWillResignActive 및 applicationDidEnterBackground
응용 프로그램이 백그라운드에서 깨어나서 활성화 할 준비가되었을 때 구현할 적절한 위임은 무엇입니까?
applicationWillEnterForeground vs applicationDidBecomeActive-차이점은 무엇입니까?
응용 프로그램이 절전 모드 일 때 데이터를 정리하고 저장하기 위해 준비 할 적절한 위임은 무엇입니까?
applicationWillResignActive와 applicationDidEnterBackground-차이점은 무엇입니까?
또한 들어오는 SMS 또는 전화가 들어 오면 applicationWillResignActive가 호출되지만 사용자는 확인을 클릭하고 계속하기로 선택합니다. 이 경우 내 앱이 어떤 조치를 취하기를 원하지 않습니다. 사용자가 앱을 종료하지 않았기 때문에 중간 정리없이 계속 실행하고 싶습니다. 따라서 applicationDidEnterBackground에서만 정리 작업을 수행하는 것이 더 합리적이라고 생각합니다.
SMS / 통화에 의해 중단되는 것과 같은 이벤트를 고려할뿐만 아니라 깨우기 및 절전 모드로 구현할 델리게이트를 선택하는 모범 사례에 대한 귀하의 의견에 감사드립니다.
감사
깨어날 때 (스프링 보드, 앱 전환 또는 URL을 통해) 앱을 다시 시작하는 applicationWillEnterForeground:
것이 호출됩니다. 백그라운드에 놓은 후 앱을 사용할 준비가되면 한 번만 실행되지만 applicationDidBecomeActive:
실행 후 여러 번 호출 될 수 있습니다. 이는 applicationWillEnterForeground:
다시 시작한 후 한 번만 수행해야하는 설정에 이상적입니다.
applicationWillEnterForeground:
라고합니다 :
- 앱을 다시 시작할 때
- 전에
applicationDidBecomeActive:
applicationDidBecomeActive:
라고합니다 :
- 이후에 앱이 처음 시작될 때
application:didFinishLaunchingWithOptions:
- 후
applicationWillEnterForeground:
처리 할 URL 존재하지 않는 경우. - 이후
application:handleOpenURL:
가 호출됩니다. - 후
applicationWillResignActive:
사용자 무시가 전화 또는 SMS와 같은 중단으로합니다.
applicationWillResignActive:
라고합니다 :
- 전화 통화와 같은 방해가있을 때
- 사용자가 전화를 받으면
applicationDidEnterBackground:
호출됩니다. - 사용자가 무시하면 호출
applicationDidBecomeActive:
이 호출됩니다.
- 사용자가 전화를 받으면
- 홈 버튼을 누르거나 사용자가 앱을 전환 할 때
- 문서는 당신이해야한다고 말한다
- 진행중인 작업을 일시 중지
- 타이머 비활성화
- 게임을 일시 중지
- OpenGL 프레임 속도 감소
applicationDidEnterBackground:
라고합니다 :
- 후
applicationWillResignActive:
- 문서는 다음과 같이 말합니다.
- 공유 리소스 해제
- 사용자 데이터 저장
- 타이머 무효화
- 앱이 종료 된 경우 복원 할 수 있도록 앱 상태를 저장하십시오.
- UI 업데이트 비활성화
- 필요한 것을 수행하고 메소드를 반환하는 데 5 초가 걸립니다.
- ~ 5 초 내에 돌아 오지 않으면 앱이 종료됩니다.
- 당신은 더 많은 시간을 요청할 수 있습니다
beginBackgroundTaskWithExpirationHandler:
앱의 수명주기 관리 는 질문에 도움이됩니다. 빠른 개념을 위해 해당 문서의 그림을 볼 수 있습니다. XCode 마법사가 생성 한 코드에서 주석을 읽을 수도 있습니다. 다음과 같이 나열됩니다.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
return YES;
}
- (void)applicationWillResignActive:(UIApplication *)application
{
/*
Sent when the application is about to move from active to inactive state.
This can occur for certain types of temporary interruptions (such as an
incoming phone call or SMS message) or when the user quits the application
and it begins the transition to the background state.
Use this method to pause ongoing tasks, disable timers, and throttle down
OpenGL ES frame rates. Games should use this method to pause the game.
*/
}
- (void)applicationDidEnterBackground:(UIApplication *)application
{
/*
Use this method to release shared resources, save user data, invalidate
timers, and store enough application state information to restore your
application to its current state in case it is terminated later.
If your application supports background execution, this method is called
instead of applicationWillTerminate: when the user quits.
*/
}
- (void)applicationWillEnterForeground:(UIApplication *)application
{
/*
Called as part of the transition from the background to the active state;
here you can undo many of the changes made on entering the background.
*/
}
- (void)applicationDidBecomeActive:(UIApplication *)application
{
/*
Restart any tasks that were paused (or not yet started) while the
application was inactive. If the application was previously in the
background, optionally refresh the user interface.
*/
}
- (void)applicationWillTerminate:(UIApplication *)application
{
/*
Called when the application is about to terminate.
Save data if appropriate.
See also applicationDidEnterBackground:.
*/
}
자세한 설명은 UIApplicationDelegate 공식 문서를 참조하십시오
I was still a bit confused with Dano's answer so I did a little test to get the flow of events in certain scenarios for my reference, but it might be useful to you too. This is for apps that DO NOT use UIApplicationExitsOnSuspend
in their info.plist. This was conducted on an iOS 8 simulator + confirmed with iOS 7 device. Please excuse Xamarin's event handler names. They are very similar.
- Initial and all subsequent launches from a not-running state:
FinishedLaunching
OnActivated
- Interruption (phone call, top slide-down, bottom slide-up):
- Home button double-press listing inactive apps, then reselecting our app:
OnResignActivation
OnActivated
- Home button double-press listing inactive apps, selecting another app, then relaunching our app:
- Home button single press, then relaunch:
- Lock (on/off button), then unlock:
OnResignActivation
DidEnterBackground
WillEnterForeground
OnActivated
- Home button double-press, and terminate our app: (subsequent relaunch is first case)
OnResignActivation
DidEnterBackground
DidEnterBackground (iOS 7 only?)
Yes, DidEnterBackground
is called twice on iOS7 device. Both times UIApplication state is Background. However, iOS 8 simulator does not. This needs testing on iOS 8 device. I will update my answer when I get my hand on it, or someone else could confirm.
applicationWillEnterForeground
is called:
when app is relaunched(comes from background to foreground) This method is not invoked when app starts for the first time i.e when applicationDidFinishLaunch
is called but only when comes from background applicationDidBecomeActive
applicationDidBecomeActive
is called
when app is first launched after didFinishLaunching
after applicationWillEnterForeground
if there’s no URL to handle. after application:handleOpenURL:
is called. after applicationWillResignActive
if user ignores interruption like a phone call or SMS. after disappearing of alertView anywhere from the application
applicationWillResignActive is called when system is asking for permissions. (in iOS 10). Just in case someone hit into the same trouble as me...
In iOS 8+ there is a subtle but important difference for taking phone call.
In iOS 7 if user takes phone call both applicationWillResignActive: and applicationDidEnterBackground: are called. But in iOS 8+ only applicationWillResignActive: is called.
'IT story' 카테고리의 다른 글
Ubuntu에 OpenSSL 라이브러리를 어떻게 설치합니까? (0) | 2020.05.01 |
---|---|
제네릭 형식의 인스턴스를 만드시겠습니까? (0) | 2020.05.01 |
Apache에서 제공하는 텍스트 파일에 gzip 대신 deflate를 사용하는 이유는 무엇입니까? (0) | 2020.05.01 |
Visual Studio에서 진행중인 빌드를 어떻게 취소합니까? (0) | 2020.05.01 |
git push는 로컬 변경 사항이 있지만 최신 정보를 말합니다. (0) | 2020.05.01 |