在applicationDidEnterBackground时,performSelector afterDelay调用是否重置?

时间:2013-05-24 01:08:47

标签: ios objective-c performselector

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

谢谢! 布雷特

1 个答案:

答案 0 :(得分: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
}