後臺運行之[[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;
}```

 

原文及參考連接:
相關文章
相關標籤/搜索