Запретить выполнение фоновой задачи 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
переменная объявлена в файле myAppDelegate.h следующим образом:
UIBackgroundTaskIdentifier taskIdentifier;
Все работает как положено, я вижу, что консоль печатает ПРИВЕТ сразу после того, как прошло 30 секунд. Но я не хочуdoSomething
выполняется, если приложение выходит на передний план до тех пор, пока не истечет 30 секунд. Поэтому мне нужно отменить это. Вот как я это делаю:
- (void)applicationWillEnterForeground:(UIApplication *)application
{
isRunningInBackground = NO;
[self stopBackgroundExecution];
}
- (void)stopBackgroundExecution
{
[[UIApplication sharedApplication] endBackgroundTask:taskIdentifier];
taskIdentifier = UIBackgroundTaskInvalid;
}
Но, к сожалению, это не отменяетdoSomething
это все еще выполняется. Что я делаю неправильно? Как я могу отменить эту функцию?