通知'UIApplicationDidEnterBackgroundNotification'的效用

时间:2012-10-08 10:16:15

标签: objective-c ios xcode cordova

我正在使用Cordova 2.1.0进行IOS应用程序开发。因为,我是应用程序开发的新手,我有一个非常基本的问题。

我正在使用applicationDidEnterBackground方法在应用进入后台时处理应用控制。但我想了解应用程序进入后台时发送的UIApplicationDidEnterBackgroundNotification的效用。我以何种方式使用此通知和系统发送的其他通知(如UIApplicationWillEnterForegroundNotification等)。这些通知的USP是什么。

1 个答案:

答案 0 :(得分:1)

根据文档,方法applicationDidEnterBackground:告诉UIApplication的代表该应用程序现在在后台。在Cocoa中,许多委托消息都有相应的UINotification个也被发送。这也不例外。

根据documentation

  

该应用程序还会在调用此方法的同时发布UIApplicationDidEnterBackgroundNotification通知,以便为感兴趣的对象提供响应转换的机会。

因此,如果对象图中有对象需要响应状态转换,则可以观察此通知。我不确定除了允许图中的所有对象响应应用程序状态转换之外,确实存在一个未说明的目的。我想如果你有一个长时间运行的任务,当应用程序转换到后台任务时在对象层次结构中的某个地方执行,你可以使用beginBackgroundTaskWithExpirationHandler:的方式,类似于你在applicationDidEnterBackground中的方式。

修改

//  example, save NSArray *_myArray to disk when app enters background
//  this is contrived, and untested, just meant to show how you can
//  observe the UIApplicationDidEnterBackgroundNotification and save state
//  in an arbitrary point in the object graph. (as opposed, or in addition to, the
//  application's delegate.

//  long-running tasks, e.g. web service connections, etc. will need to 
//  get a background task identifier from the UIApplication and manage that.

__block id enteredBackground = nil;
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
enteredBackground = [center addObserverForName:UIApplicationDidEnterBackgroundNotification
                                        object:nil
                                         queue:nil
                                    usingBlock:^(NSNotification *note) {
                                        [_myArray writeToFile:@"/path/to/you/file" atomically:YES];

                     }];