使用UIApplicationDidEnterBackgroundNotification

时间:2011-02-01 12:34:13

标签: iphone objective-c uiapplication

在iPhone应用中使用UIApplicationDidEnterBackgroundNotification或者我们如何从中受益

2 个答案:

答案 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通知,以便为感兴趣的对象提供响应转换的机会。