在iPhone应用中使用UIApplicationDidEnterBackgroundNotification
或者我们如何从中受益
答案 0 :(得分:25)
此通知表示用户在iPhone 4上“退出”您的应用程序 - 当有电话或短信进来且用户接受中断(回答/回复)或用户按下主页按钮时,就会发生这种情况。
我在SO上找到了这个链接,显示了所有状态之间的交互以及相应的通知: http://www.drobnik.com/touch/2010/07/understanding-ios-4-backgrounding-and-delegate-messaging/
要使用此通知,您可以将@Dntwan建议实现applicationDidEnterBackground(在您的UIApplicationDelegate类中 - 这是主类)。
或者,您可以在代码中的任何位置设置通知处理程序:
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(handleEnteredBackground:)
name: UIApplicationDidEnterBackgroundNotification
object: nil];
祝你好运!
乌迪德。
答案 1 :(得分:3)
来自apple documentation。
告诉代表该应用程序现在在后台。
- (void)applicationDidEnterBackground:(UIApplication *)application
<强>参数强> 应用 单例应用程序实例。
<强>讨论强>
在iOS 4.0及更高版本中,当用户退出支持后台执行的应用程序时,将调用此方法而不是applicationWillTerminate:
方法。您应该使用此方法释放共享资源,保存用户数据,使计时器无效,并存储足够的应用程序状态信息,以便将应用程序恢复到当前状态,以防以后终止。您还应该禁用应用程序用户界面的更新,并避免使用某些类型的共享系统资源(例如用户的联系人数据库)。您还必须避免在后台使用OpenGL ES。
您执行此方法大约需要五秒钟才能执行任何任务并返回。如果您需要额外的时间来执行任何最终任务,可以通过调用beginBackgroundTaskWithExpirationHandler:
从系统请求额外的执行时间。在实践中,您应该尽快从applicationDidEnterBackground:
返回。如果方法在时间用完之前没有返回,则应用程序将终止并从内存中清除。
在此方法退出之前,您应该执行与调整用户界面相关的任何任务,但是应根据需要将其他任务(例如保存状态)移动到并发调度队列或辅助线程。因为在applicationDidEnterBackground:
中启动的任何后台任务可能在该方法退出之后才会运行,所以在开始执行这些任务之前,您应该请求额外的后台执行时间。换句话说,首先调用beginBackgroundTaskWithExpirationHandler:
,然后在调度队列或辅助线程上运行任务。
该应用程序还会在调用此方法的同时发布UIApplicationDidEnterBackgroundNotification
通知,以便为感兴趣的对象提供响应转换的机会。