iOS:背景/前景事件

时间:2012-08-21 09:38:43

标签: ios multitasking

我正在开发一个应用程序,当它通过主页按钮在后台推送时,应该启动计时器,当应用程序返回到前台并且计时器已经过了一定的时间时,应该是执行。

我的问题是

  1. 我的应用程序进入时如何处理事件 背景/前景?
  2. 是否有特殊方法或其他技术?
  3. 非常感谢。

2 个答案:

答案 0 :(得分:1)

在app的appDelegate中,您可以使用一些委托方法。

您可以查看AppDelegate应符合的UIApplicationDelegate协议。

当在后台推送应用程序时,将调用函数applicationDidEnterBackground:。当进入前台applicationWillEnterForeground:被调用。

最好不要使用计时器,而是在applicationDidEnterBackground:方法中存储NSDate引用。当您的应用程序进入前台时,您可以使用

使用存储的NSDate计算timeDifference
- (NSTimeInterval)timeIntervalSinceDate:(NSDate *)anotherDate 

功能

答案 1 :(得分:1)

可能的实现方式如下:

#define YOUR_TIME_INTERVAL 60*60*5   //i.e. 5 hours

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    //... your oder code goes here

    NSNumber *timeAppClosed = [NSNumber numberWithDouble:[[NSDate date] timeIntervalSince1970]];
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults timeAppClosed forKey:@"time.app.closed"];
    [defaults synchronize];
}

- (void)applicationWillEnterForeground:(UIApplication *)application
{
    NSNumber *timeAppClosed = [[NSUserDefaults standardUserDefaults] valueForKey:@"time.app.closed"];
    if(timeAppClosed == nil)
    {
        //No time was saved before so it is the first time the user
        //opens the app
    }
    else if([[NSDate date] timeIntervalSinceDate:[NSDate dateWithTimeIntervalSince1970:[timeAppClosed doubleValue]]] > YOUR_TIME_INTERVAL)
    {
        //Place your code here
    }
}