Wednesday, November 28, 2012

Cocos2D and applicationWillEnterForeground


When waking up i.e. relaunching an app (either through springboard, app switching or URL)applicationWillEnterForeground: is called. It is only executed once when the app becomes ready for use, after being put into the background, while applicationDidBecomeActive: may be called multiple times after launch. This makes applicationWillEnterForeground: ideal for setup that needs to occur just once after relaunch.
applicationWillEnterForeground: is called:
  • when app is relaunched
  • before applicationDidBecomeActive:
applicationDidBecomeActive: is called:
  • when app is first launched after application:didFinishLaunchingWithOptions:
  • 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.
applicationWillResignActive: is called:
  • when there is an interruption like a phone call.
    • if user takes call applicationDidEnterBackground: is called.
    • if user ignores call applicationDidBecomeActive: is called.
  • when the home button is pressed or user switches apps.
  • docs say you should
    • pause ongoing tasks
    • disable timers
    • pause a game
    • reduce OpenGL frame rates
applicationDidEnterBackground: is called:
  • after applicationWillResignActive:
  • docs say you should:
    • release shared resources
    • save user data
    • invalidate timers
    • save app state so you can restore it if app is terminated.
    • disable UI updates
  • you have 5 seconds to do what you need to and return the method
    • if you dont return within ~5 seconds the app is terminated.
    • you can ask for more time with beginBackgroundTaskWithExpirationHandler:
- (void)applicationWillEnterForeground:(UIApplication *)application
{
 [[CCDirector sharedDirector] resume];
 [[CCDirector sharedDirector] startAnimation];
}

- (void) applicationDidEnterBackground:(UIApplication *)application
{
 [[CCDirector sharedDirector] stopAnimation];
 [[CCDirector sharedDirector] pause];
}

- (void)applicationWillResignActive:(UIApplication *)application {
 [[CCDirector sharedDirector] stopAnimation];
 [[CCDirector sharedDirector] pause];
}

- (void)applicationDidBecomeActive:(UIApplication *)application {
 [[CCDirector sharedDirector] stopAnimation]; // Avoid 2 Display Link Crash ***
 [[CCDirector sharedDirector] resume];
 [[CCDirector sharedDirector] startAnimation];
}


Sources:

No comments: