后台运行之[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:nil]

Posted 路人Q

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了后台运行之[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:nil]相关的知识,希望对你有一定的参考价值。

// 正常程序退出后,会在几秒内停止工作;
// 要想申请更长的时间,需要用到
// beginBackgroundTaskWithExpirationHandler
// endBackgroundTask
// 一定要成对出现

- (void)applicationDidEnterBackground:(UIApplication *)application {
    
    [self beginTask];
    //在非主线程开启一个操作在更长时间内执行; 执行的动作
    aa =0;
    _timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(go:) userInfo:nil repeats:YES]; 
  }

-(void)go:(NSTimer *)tim
{
    NSLog(@"%@==%ld ",[NSDate date],aa);
    aa++;
    if (aa==9) {
        [_timer invalidate];
            [self endBack]; // 任务执行完毕,主动调用该方法结束任务
    }
}

-(void)beginTask
{
    NSLog(@"begin=============");
   _backIden = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
       NSLog(@"begin  bgend=============");
       [self endBack]; // 如果在系统规定时间内任务还没有完成,在时间到之前会调用到这个方法,一般是10分钟
   }];
}

-(void)endBack
{
    NSLog(@"end=============");
    [[UIApplication sharedApplication] endBackgroundTask:_backIden];
    _backIden = UIBackgroundTaskInvalid;
}```

 

原文及参考链接:
 

以上是关于后台运行之[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:nil]的主要内容,如果未能解决你的问题,请参考以下文章

如何同时运行后台服务应用程序和 UIApplication

后台任务未运行

从后台线程访问 [UIApplication sharedApplication] 可以吗?

app额外后台运行操作

- (void)applicationWillTerminate:(UIApplication *) 当应用程序从后台移除时应用程序没有调用

什么是 FNFPlayer?它从后台线程访问 UIApplication applicationState