iOS12下APP進入後臺後再返回前臺連線斷開
阿新 • • 發佈:2018-12-12
在release環境下,APP在iOS12的時候退到後臺然後再返回到前臺的時候網路請求返回錯誤,AFN返回錯誤碼53,NSPOSIXErrorDomain Code=53: Software caused connection abort。但是在Debug環境下卻沒發現這個問題,其他系統版本下也沒有問題,所有就懷疑是不是iOS12的原因。
最後在github上 AFNetworking的留言中發現了國外的開發者也遇到了這個問題,並且給蘋果發了郵件,也收到了蘋果的回覆,https://github.com/AFNetworking/AFNetworking/issues/4279
雖然給的回覆是問題出在蘋果那邊,但是也不知道蘋果啥時候解決這個問題,所以遇到的問題還得解決,最後推測是退到後臺的時候系統掛起了APP,既然有10分鐘,那麼就一定要爭取到!所以申請後臺任務:
1.在工程的AppDelegate檔案中
@interface AppDelegate () @property (nonatomic, unsafe_unretained) UIBackgroundTaskIdentifier taskId; @property (nonatomic, strong) NSTimer *timer; @end
2.在AppDelegate中的- (void)applicationDidEnterBackground:(UIApplication *)application 方法中
self.taskId =[application beginBackgroundTaskWithExpirationHandler:^(void) { //當申請的後臺時間用完的時候呼叫這個block //此時我們需要結束後臺任務, [self endTask]; }]; // 模擬一個長時間的任務 Task self.timer =[NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(longTimeTask:) userInfo:nil repeats:YES];
3.結束後臺任務後臺任務結束的時候要釋放定時器
#pragma mark - 停止timer -(void)endTask { if (_timer != nil||_timer.isValid) { [_timer invalidate]; _timer = nil; //結束後臺任務 [[UIApplication sharedApplication] endBackgroundTask:taskId]; taskId = UIBackgroundTaskInvalid; NSLog(@"停止timer"); } }
4.模擬的長時間後臺任務
- (void) longTimeTask:(NSTimer *)timer{ // 系統留給的我們的時間 NSTimeInterval time =[[UIApplication sharedApplication] backgroundTimeRemaining]; NSLog(@"系統留給的我們的時間 = %.02f Seconds", time); }
這樣App就不會一進入後臺就會被掛起