Mam zegar działający, gdy urządzenie wchodzi w tło, ponieważ chcę, aby sprawdzić niewielką ilość danych w mojej usłudze. Używam następujący kod w metodzie applicationDidEnterBackground w app delegataZadanie w tle zatrzymuje się, gdy urządzenie jest zablokowane?
UIApplication *app = [UIApplication sharedApplication];
//create new uiBackgroundTask
__block UIBackgroundTaskIdentifier bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
//and create new timer with async call:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//run function methodRunAfterBackground
NSString *server = [variableStore sharedGlobalData].server;
NSLog(@"%@",server);
if([server isEqual:@"_DEV"]){
arrivalsTimer = [NSTimer scheduledTimerWithTimeInterval:30 target:self selector:@selector(getArrivals) userInfo:nil repeats:YES];
}
else {
arrivalsTimer = [NSTimer scheduledTimerWithTimeInterval:300 target:self selector:@selector(getArrivals) userInfo:nil repeats:YES];
}
[[NSRunLoop currentRunLoop] addTimer:arrivalsTimer forMode:NSDefaultRunLoopMode];
[[NSRunLoop currentRunLoop] run];
});
Działa to absolutnie w porządku, dopóki urządzenie samochodowych zamków, a następnie zegar przestaje odliczać. Wszelkie sugestie, jak temu zapobiec? Domyślny czas na żywo to 5 minut, więc większość urządzeń zostanie zablokowana na długo przed tym, zanim jeszcze raz się skasuje.
Dzięki
Może można wydrukować coś w uchwycie, aby zobaczyć jeśli kończy się czas lub jeśli problem jest gdzieś indziej. – Andreas
Tak, używam NSLog, gdy funkcja jest wywoływana i po prostu przestaje drukować, gdy urządzenie automatycznie blokuje się. Jeśli ręcznie zablokuję urządzenie, będzie ono działało przez jakiś czas, ale w końcu się zatrzyma. Sądzę, że będę musiał spojrzeć na powiadomienie push, zamiast polegać na wywołaniu usługi z tła. –
Mam na myśli wydrukować coś w obsłudze expiration. Jeśli daje tylko dodatkowy czas wykonania w oparciu o to, kiedy ekran normalnie miałby automatyczną blokadę, zobaczysz to z NSLogiem. – Andreas