iOS12下APP進入后台后再返回前台連接斷開


 

在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就不會一進入后台就會被掛起

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM