Запланированный NSTimer, когда приложение находится в фоновом режиме?

Как люди справляются с запланированным NSTimer, когда приложение работает в фоновом режиме?

Допустим, я что-то обновляю в своем приложении каждый час.

updateTimer = [NSTimer scheduledTimerWithTimeInterval:60.0*60.0 
target:self 
selector:@selector(updateStuff) 
userInfo:nil 
repeats:YES];

В фоновом режиме этот таймер явно не срабатывает (?). Что должно произойти, когда пользователь вернется в приложение ..? Таймер все еще работает с тем же временем?

И что произойдет, если пользователь вернется через час. Будет ли он срабатывать все время, которое он пропустил, или он будет ждать до следующего обновления?

Я бы хотел, чтобы он обновлялся сразу после того, как приложение переходит на передний план, если дата, которую оно должно было запустить, - в прошлом. Возможно ли это?

53
задан cannyboy 7 December 2011 в 02:13
поделиться

1 ответ

============== Для Объективного c ================

создают Глобальный uibackground идентификатор задачи.

UIBackgroundTaskIdentifier bgRideTimerTask;

теперь создают Ваш таймер и добавляют BGTaskIdentifier С ним, не забывайте удалять старый BGTaskIdentifier при создании нового Объекта - таймера.

 [timerForRideTime invalidate];
 timerForRideTime = nil;

 bgRideTimerTask = UIBackgroundTaskInvalid;

 UIApplication *sharedApp = [UIApplication sharedApplication];       
 bgRideTimerTask = [sharedApp beginBackgroundTaskWithExpirationHandler:^{

                            }];
 timerForRideTime =  [NSTimer scheduledTimerWithTimeInterval:1.0
                                                                                 target:self
                                                                               selector:@selector(timerTicked:)
                                                                               userInfo:nil
                                                                                repeats:YES]; 
                                                   [[NSRunLoop currentRunLoop]addTimer:timerForRideTime forMode: UITrackingRunLoopMode];

Здесь это будет работать на меня, даже когда приложение входит в background.ask меня при нахождении новых проблем.

0
ответ дан 7 November 2019 в 08:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: