// 正常程序退出後,會在幾秒內中止工做; // 要想申請更長的時間,須要用到 // 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; }```