Странный результат попытки запустить NSTimer после того, как приложение переходит в фоновый режим - PullRequest
0 голосов
/ 01 ноября 2011

Это мой код:

- (void) printCount {
    NSLog(@"Current second: %i", i++);
}


- (void)applicationDidEnterBackground:(UIApplication *)application
{    
    UIBackgroundTaskIdentifier taskId = [application beginBackgroundTaskWithExpirationHandler:^{NSLog(@"Task expired");}];
    [NSTimer scheduledTimerWithTimeInterval:1.0
                                     target:self
                                   selector:@selector(printCount) userInfo:nil repeats:YES];
    if (i == 10000) {
        [application endBackgroundTask:taskId];
    }
}

И вот журнал, который я получаю:

....
Current second: 579
Current second: 580
Current second: 581
Current second: 582
Current second: 583
Task expired
Current second: 584
Current second: 585
Current second: 586
Current second: 587
Current second: 588
Current second: 589
Current second: 590
....

Как я знаю, использование beginBackgroundTaskWithExpirationHandler позволило только 10 минутЯ имею в виду, что срок действия UIBackgroundTaskIdentifier истекает через 10 минут.И это действительно произошло («Задача истекла» в журнале)!Но почему NSTimer продолжать бежать?o_O С уважением!

1 Ответ

0 голосов
/ 01 ноября 2011

Из документации для beginBackgroundTaskWithExpirationHandler:

Обработчик, вызываемый незадолго до того, как оставшееся фоновое время приложения достигает 0. Вы должны использовать этот обработчик, чтобы очистить и отметить конец фоновой задачи. Если явно не завершить задачу, приложение будет закрыто. Обработчик вызывается синхронно в главном потоке, таким образом на мгновение блокируя приостановку приложения, пока приложение уведомляется.

т.е. это всего лишь уведомление о том, что срок действия задачи истечет, но вы все равно обязаны закрыть ее (и если вы этого не сделаете, система через некоторое время просто ее убьет).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...