0

我完全理解它们是否是,但我正在寻找的是一个计时器,它在应用程序进入后台时暂停并在用户返回应用程序后取消暂停。我不需要后台任务;我只是想确保在应用程序内大约 x 分钟后,无论是今天还是明天,都会发生某个动作。

谢谢!布雷特

4

1 回答 1

1

后台应用程序(假设您没有后台任务)不会“暂停”计时器。理论上它仍然在倒计时,所以如果重新打开应用程序,如果经过足够的时间,它将触发。这也适用于 NSTimer。(如果您想了解有关原因的更多详细信息,请告诉我,我将编辑答案)。

考虑使用以下代码:

@implementation MyCustomClass {
    int elapsedTime;
    NSTimer *timer;
}

- (id) init {
    if ( ( self = [super init] ) ) {
        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(applicationEnteredBackground)
                                                     name:UIApplicationDidEnterBackgroundNotification
                                                   object:nil];
        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(applicationEnteredForeground)
                                                     name:UIApplicationDidBecomeActiveNotification
                                                   object:nil];
    }
    return self;
}


- (void) applicationEnteredForeground { 
    timer = [NSTimer timerWithTimeInterval:1
                                    target:self
                                  selector:@selector(timerTicked)
                                  userInfo:nil
                                   repeats:YES];
    [[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
}

- (void) applicationEnteredBackground {
    [timer invalidate];
}

- (void) timerTicked {
    elapsedTime += 1;
    // If enough time passed, do something
}
于 2013-05-24T01:33:36.710 回答