我正在使用 beginBackgroundTaskWithExpirationHandler 获得 10 分钟的额外时间让应用程序在后台运行。但如果应用程序在提供的 10 分钟时间内进入前台,我需要停止此后台任务。我的代码如下
- (void)applicationDidEnterBackground:(UIApplication *)application
{
bgTask = [application beginBackgroundTaskWithExpirationHandler: ^ {
NSLog(@"invalidate back task in didenter %@",[application backgroundTimeRemaining]);
if (bgTask != UIBackgroundTaskInvalid) {
[application endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}
}];
//Background tasks require you to use asyncrous tasks
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"\n\nRunning in the background inside DidEnterBackground %f!\n\n", [application backgroundTimeRemaining]);
while ([application backgroundTimeRemaining] > 1.0) {
NSLog(@"\n\nRunning in background %f!\n\n", [application backgroundTimeRemaining]);
sleep(5);
}
[application endBackgroundTask: bgTask];
bgTask = UIBackgroundTaskInvalid;
});
}
当应用程序出现在前台时,我正在结束这样的后台任务
- (void)applicationWillEnterForeground:(UIApplication *)application
{
[application endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}
bgTask 在 .h 文件中全局声明。当应用程序进入前台时,它仍在运行后台任务,并将 backgroundTimeRemaining 显示为长整数值。我不知道如何停止后台任务,请帮助我。
谢谢