1

我正在开发一个应用程序,在该应用程序中,当通过主页按钮将其推入后台时,应启动计时器,并且当应用程序返回前台并且计时器已经过一定时间时,应执行某些操作。

我的问题是

  1. 当我的应用程序进入后台/前台时如何处理事件?
  2. 有什么特殊的方法或其他技术吗?

非常感谢。

4

2 回答 2

1

在应用程序的 appDelegate 中,您有一些可以实现的委托方法。

您可以查看 AppDelegate 应遵循的UIApplicationDelegate协议。

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

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

- (NSTimeInterval)timeIntervalSinceDate:(NSDate *)anotherDate 

功能。

于 2012-08-21T09:45:02.157 回答
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
    }
}
于 2012-08-21T10:02:27.717 回答