Ho un timer in esecuzione quando il dispositivo entra in background perché voglio mantenere un controllo su una piccola quantità di dati nel mio servizio. Sto usando il seguente codice nel metodo applicationDidEnterBackground in App delegatoL'attività in background si interrompe quando il dispositivo è bloccato?
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];
});
Questo funziona assolutamente bene, fino a quando il dispositivo auto-serrature e poi il timer si ferma ticchettio. Qualche suggerimento su come impedire che ciò accada? Il tempo di live predefinito è di 5 minuti, quindi la maggior parte dei dispositivi sarà bloccata molto prima che questo torni anche una volta.
Grazie
Forse si può stampare qualcosa nel gestore per vedere se siete a corto di tempo o se il problema è da qualche altra parte. – Andreas
Sì, eseguo un NSLog quando viene chiamata la funzione e interrompe semplicemente la stampa quando il dispositivo si blocca automaticamente. Se blocco manualmente il dispositivo, continua a funzionare per un po 'ma alla fine si interrompe. Credo che potrei dover dare un'occhiata a una notifica push piuttosto che affidarmi a chiamare un servizio in background. –
Voglio dire stampare qualcosa nel gestore di scadenza. Se ti dà solo un tempo di esecuzione extra in base a quando lo schermo verrebbe automaticamente bloccato automaticamente, lo scoprirai con un NSLog. – Andreas