这是我的问题。当我的应用程序进入后台时,我希望它在一段时间后执行一项功能。这是我做的:防止执行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;
一切正常,因为它应该,我看到控制台打印HELLO 30刚过权秒消失了。但是我不希望doSomething
在应用程序进入前景时执行,直到30秒结束。所以我需要取消它。这是我该怎么做:
- (void)applicationWillEnterForeground:(UIApplication *)application
{
isRunningInBackground = NO;
[self stopBackgroundExecution];
}
- (void)stopBackgroundExecution
{
[[UIApplication sharedApplication] endBackgroundTask:taskIdentifier];
taskIdentifier = UIBackgroundTaskInvalid;
}
但不幸的是,它不取消doSomething
,它仍然执行。我究竟做错了什么?我如何取消该功能?
你是对的,那是更好的解决方案! –
非常感谢!很简单!我应该自己想过 –