如何检测到应用程序刚刚从“后台模式”返回?我的意思是,当用户按下“主页按钮”时,我不希望我的应用程序(每 60 秒)获取数据。但是,我想在应用程序第一次处于前台模式时进行一些“特殊”更新。
如何检测这两个事件:
- 应用程序进入后台模式
- 应用程序进入前台模式
提前致谢。
弗朗索瓦
如何检测到应用程序刚刚从“后台模式”返回?我的意思是,当用户按下“主页按钮”时,我不希望我的应用程序(每 60 秒)获取数据。但是,我想在应用程序第一次处于前台模式时进行一些“特殊”更新。
如何检测这两个事件:
提前致谢。
弗朗索瓦
以下是监听此类事件的方法:
// Register for notification when the app shuts down
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myFunc) name:UIApplicationWillTerminateNotification object:nil];
// On iOS 4.0+ only, listen for background notification
if(&UIApplicationDidEnterBackgroundNotification != nil)
{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myFunc) name:UIApplicationDidEnterBackgroundNotification object:nil];
}
// On iOS 4.0+ only, listen for foreground notification
if(&UIApplicationWillEnterForegroundNotification != nil)
{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myFunc) name:UIApplicationWillEnterForegroundNotification object:nil];
}
注意:if(&SomeSymbol)
检查确保您的代码可以在 iOS 4.0+ 和 iOS 3.x 上运行 - 如果您针对 iOS 4.x 或 5.x SDK 构建并将部署目标设置为 iOS 3.x,您的应用程序仍然可以在 3.x 设备上运行,但相关符号的地址将为 nil,因此它不会尝试请求 3.x 设备上不存在的通知(这会使应用程序崩溃)。
更新:在这种情况下,if(&Symbol)
检查现在是多余的(除非您出于某种原因确实需要支持 iOS 3)。但是,了解这种技术有助于在使用 API 之前检查它是否存在。我更喜欢这种技术而不是测试操作系统版本,因为您正在检查特定 API 是否存在,而不是使用外部知识来了解哪些 API 存在于哪些操作系统版本中。
如果你实现了一个 UIApplicationDelegate,你也可以作为委托的一部分挂钩到函数中:
- (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, called instead of applicationWillTerminate: when the user quits.
*/
NSLog(@"Application moving to background");
}
- (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.
*/
NSLog(@"Application going active");
}