이 코드를 사용하여 배경 세션을 생성하고 회복 속도가 느린 배경 NSURLSessionDownloadTask 포장 마차, ...전경
let configuration = URLSessionConfiguration.background(withIdentifier: UUID().uuidString)
configuration.sessionSendsLaunchEvents = true
configuration.isDiscretionary = false
self.session = Foundation.URLSession(configuration: configuration, delegate: self, delegateQueue: nil)
... 및 다운로드 작업 :
let downloadTask = self.session.downloadTask(with: request as URLRequest)
downloadTask.resume()
내 요청 객체는 다음과 같습니다 :
let request = NSMutableURLRequest(url: someURL)
request.httpMethod = "POST"
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
do {
try request.httpBody = JSONSerialization.data(withJSONObject: someDictionary, options: JSONSerialization.WritingOptions())
} catch let error as NSError {
// logging calls
}
다운로드중인 리소스는 ~ 20MB zip 파일입니다.
아무런 문제없이 포 그라운드에서 4 회의 동시 다운로드를 실행할 수 있습니다. 모든 예상 된 대리자 메서드가 호출되고 전송 속도가 정상 속도로 완료됩니다.
내가보기에 문제는 전방에서 다운로드를 시작한 다음 홈 버튼을 누르면 다운로드가 중단된다는 것입니다. 장치를 깨우기 위해 노력하고 네트워크가 한 시간 동안 회전하고 전송이 백그라운드에서 완료되지 않습니다. 또한 앱을 포 그라운드로 가져 오면 전송이 즉시 다시 시작되지 않습니다. 앱을 포 그라운드에서 약 4 분 동안 앉아있게하면 깨어나서 다시 작업하기 시작합니다. 그들은 앱이 백그라운드로 들어간 시점의 비율로 다시 시작하고 완료 될 때까지 정상 속도로 전송합니다. 언제든지 오류가 발생하지 않으며 전송이 궁극적으로 성공합니다. 백그라운드에서 멈추는 순간, 앱이 포 그라운드로 되돌아 올 때 다시 시작하는 속도가 매우 느립니다.
iOS 10을 실행하는 iPhone 6에서 테스트 중입니다. Xcode 또는 외부 전원에 연결되어 있지 않아 응용 프로그램이 차가워졌습니다. WiFi 및 셀룰러 연결을 통해 문제를 재현 할 수 있습니다. 앱을 삭제하고 여러 번 다시로드했습니다.
약 20 %의 시간이 걸리므로 문제가 발생했습니다. 일관되게 작동하거나 실패하게하는 특정 변수 세트를 찾지 못했습니다. 여러 다운로드가 발생하면 더 자주 발생하는 것으로 보이며,이 상황에서 모든 다운로드가 위에서 설명한 동작을 나타냅니다.
모든 안내가 크게 감사드립니다!
매트
다른 세션 구성을 시도해 보셨습니까? 배경이 아닌 – iWheelBuy