2

我正在使用 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 显示为长整数值。我不知道如何停止后台任务,请帮助我。

谢谢

4

0 回答 0