gpt4 book ai didi

ios - 防止 dispatch_after() 后台任务被执行

转载 作者:技术小花猫 更新时间:2023-10-29 10:40:44 47 4
gpt4 key购买 nike

这是我的问题。当我的应用程序进入后台时,我希望它在一段时间后执行一个功能。这就是我所做的:

- (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 秒后立即打印 HELLO。但是,如果应用程序进入前台直到 30 秒结束,我不希望执行 doSomething 。所以我需要取消它。我就是这样做的:

- (void)applicationWillEnterForeground:(UIApplication *)application
{
isRunningInBackground = NO;
[self stopBackgroundExecution];
}

- (void)stopBackgroundExecution
{
[[UIApplication sharedApplication] endBackgroundTask:taskIdentifier];
taskIdentifier = UIBackgroundTaskInvalid;
}

但不幸的是它并没有取消doSomething,它仍然被执行。我究竟做错了什么?我如何取消该功能?

最佳答案

为什么还要使用 GCD?您可以只使用 NSTimer 并在您的应用返回到前台时使它失效。

关于ios - 防止 dispatch_after() 后台任务被执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12475450/

47 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com