9

iPhone应用程序有什么用途UIApplicationDidEnterBackgroundNotification或我们如何从中受益

4

2 回答 2

29

此通知意味着用户在 iPhone 4 上“退出”您的应用程序 - 当有电话或短信进来并且用户接受中断(接听/回复),或者当用户按下主页按钮时,就会发生这种情况。

我在 SO 上找到了这个链接,它显示了所有状态之间的交互以及相应的通知: http ://www.drobnik.com/touch/2010/07/understanding-ios-4-backgrounding-and-delegate-messaging/

要使用此通知,您可以按照@Antwan 的建议实现 applicationDidEnterBackground(在您的 UIApplicationDelegate 类中 - 这是主类)。

或者,您可以在代码中任何您想要/需要的地方设置通知处理程序:

[[NSNotificationCenter defaultCenter] addObserver: self
                                         selector: @selector(handleEnteredBackground:) 
                                             name: UIApplicationDidEnterBackgroundNotification
                                           object: nil];

祝你好运!

奥德。

于 2011-02-10T08:02:15.597 回答
3

来自苹果文档

告诉代理应用程序现在在后台。

- (void)applicationDidEnterBackground:(UIApplication *)application

参数 application 单例应用程序实例。

讨论applicationWillTerminate:在 iOS 4.0 及更高版本中,当用户退出支持后台执行的应用程序时,将 调用此方法而不是该方法。您应该使用此方法来释放共享资源、保存用户数据、使计时器无效并存储足够的应用程序状态信息以将您的应用程序恢复到其当前状态以防以后终止。您还应该禁用对应用程序用户界面的更新,并避免使用某些类型的共享系统资源(例如用户的联系人数据库)。您还必须避免在后台使用 OpenGL ES。

您对此方法的实现大约有五秒钟的时间来执行任何任务并返回。如果您需要额外的时间来执行任何最终任务,您可以通过调用向系统请求额外的执行时间beginBackgroundTaskWithExpirationHandler:。在实践中,您应该尽快返回applicationDidEnterBackground:。如果该方法在时间用完之前没有返回,则您的应用程序将被终止并从内存中清除。

您应该在此方法退出之前执行与调整用户界面相关的任何任务,但其他任务(例如保存状态)应根据需要移动到并发调度队列或辅助线程。因为您启动的任何后台任务很可能applicationDidEnterBackground:在该方法退出之后才会运行,因此您应该在启动这些任务之前请求额外的后台执行时间。换句话说,首先调用beginBackgroundTaskWithExpirationHandler:然后在调度队列或辅助线程上运行任务。

应用程序还会UIApplicationDidEnterBackgroundNotification在调用此方法的同时发布通知,让感兴趣的对象有机会响应转换。

于 2011-02-01T12:55:55.843 回答