Este es mi problema. Cuando mi aplicación entra en segundo plano, quiero que realice una función después de cierto período de tiempo. Esto es lo que hago:Evitar que se ejecute la tarea en segundo plano dispatch_after()
- (void)applicationDidEnterBackground:(UIApplication *)application
{
isRunningInBackground = YES;
taskIdentifier = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:nil];
int64_t delayInSeconds = 30;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void)
{
[self doSomething];
});
}
- (void)doSomething
{
NSLog(@"HELLO");
}
taskIdentifier
variable se declara en el archivo myAppDelegate.h así:
UIBackgroundTaskIdentifier taskIdentifier;
Todo funciona como se supone que, veo que las impresiones de la consola HOLA justo después de 30 segundos se fueron. Pero no quiero que se ejecute doSomething
si la aplicación entra en primer plano hasta que hayan transcurrido 30 segundos. Entonces necesito cancelarlo. Esta es la forma en que lo hago:
- (void)applicationWillEnterForeground:(UIApplication *)application
{
isRunningInBackground = NO;
[self stopBackgroundExecution];
}
- (void)stopBackgroundExecution
{
[[UIApplication sharedApplication] endBackgroundTask:taskIdentifier];
taskIdentifier = UIBackgroundTaskInvalid;
}
Pero, desgraciadamente, no cancela doSomething
, todavía se lleva a cabo. ¿Qué estoy haciendo mal? ¿Cómo cancelo esa función?
Tiene usted razón, que es la mejor solución! –
¡Muchas gracias! ¡Tan sencillo! Debería haberlo pensado –