2016-05-13 8 views
3

Ich muss Download-Aufgaben anhalten und fortsetzen, auch nachdem App neu gestartet. Aber ich bin unsicher, welche Methode ich verwenden soll, suspend oder cancelByProducingResumeData.NSURLSessionDownloadTask cancelByProducingResumeData vs suspend

Mit cancelByProducingResumeData kann ich die teilweise heruntergeladenen Daten abrufen und Download-Aufgabe damit neu erstellen. Allerdings muss ich die Daten manuell verwalten, in einer Datei speichern, zurücklesen und die Aufgabe neu erstellen und sicherstellen, dass die neue Aufgabe nicht fehlschlägt.

Mit suspend kann ich den Download-Vorgang anhalten und fortsetzen. Kann ich diese Aufgabe nach dem Neustart der App fortsetzen? Ich verwende Hintergrundsitzung, so dass Aufgaben beim Neustart erhalten bleiben.

cancelByProducingResumeDatarequirements haben für sie zu arbeiten, macht diese Anforderungen gilt auch für suspend/resume? Oder suspend/resume ist nur Mittel für "vorübergehend suspendiert eine Aufgabe", wie das Dokument sagte?

+0

Basierend auf meiner Lesung, CancelByProducingResumeData ist Ihre einzige Wahl. – jtbandes

Antwort

1

Sie überschätzen das Problem. Die "Fortsetzungsdaten" für eine Download-Aufgabe sind nicht die Daten, die die Aufgabe bis zu diesem Punkt erhalten hat. Es ist ein winziger Klumpen von Buchhaltungsdaten - die Art von Dingen, die Sie normalerweise in ein Array in NSUserDefaults werfen würden.

Mit diesem gesagt, um die ursprüngliche Frage zu beantworten, ist eine Aufgabe nur im Rahmen einer Sitzung gültig. Bei einer Vordergrundsitzung endet die Sitzung nach dem Beenden der Anwendung nicht mehr, sodass es nicht mehr möglich ist, auf Aufgaben in dieser Sitzung zuzugreifen. Daher ist es nicht möglich, eine gesperrte Aufgabe nach dem Neustart der App fortzusetzen, da die Aufgabe nicht mehr existiert (weil ihre Sitzung nicht mehr existiert).

Für eine Hintergrundsitzung müssten Sie jemanden im Foundation Networking-Team bitten, eine Antwort darauf zu erhalten, da dies davon abhängt, in welchem ​​Umfang Sie eine Sitzung nachträglich erstellen können. Ich vermute jedoch, dass es dort wahrscheinlich auch nicht funktionieren wird, und wenn dies der Fall ist, sollten Sie es als nicht unterstützt betrachten.

+0

Behaupten Sie, dass die "Daten fortsetzen" zwischen App-Starts nicht verwendbar ist? Ist das irgendwo dokumentiert? – jtbandes

+0

Nein, überhaupt nicht. Die Daten, die die Aufgabe bis zu diesem Zeitpunkt erhalten hat, werden von der Download-Aufgabe stillschweigend in einer Datei auf der Festplatte gespeichert. Die Fortsetzungsdaten informieren nur die neue Aufgabe, wo sie zu finden ist. Deshalb ist es so ein kleiner Datenblock. – dgatwood

+0

OK, ich war verwirrt, weil ich zu schnell gelesen habe - mit * "es ist nicht möglich, eine gesperrte Aufgabe fortzusetzen, nachdem Sie die App neu gestartet haben" * Sie meinten wirklich 'suspend() 'ed, nicht' cancelByProducingResumeData', was meiner Meinung nach auch funktioniert OP's Bedürfnisse. – jtbandes

1

Nach einigen Recherchen auf Apple Entwickler Formen, fand ich this

Aufgaben Suspension selten verwendet wird, und wenn es ist, es meist vorübergehend verwendet wird, um Rückrufe als Teil einer Art von Concurrency Control System zu deaktivieren. Das liegt daran, dass eine unterbrochene Aufgabe immer noch aktiv sein kann. Alles, was der Suspend tut, verhindert, dass es intern Fortschritte macht, Callbacks ausgibt und so weiter.

OTOH, wenn Sie eine langfristige Pause implementieren (z. B. möchte der Benutzer einen Download pausieren), sollten Sie besser -cancelByProducingResumeData: aufrufen.

So suspend kann eigentlich nicht aufhören, das Herunterladen und ich sollte cancelByProducingResumeData: für langfristige Pause verwenden.

+0

Das stimmt nicht genau. Zu einem bestimmten Zeitpunkt sollte der Empfangspuffer des TCP-Sockets voll sein, weil niemand davon liest, an dem der entfernte Host aufhören sollte, Daten zu senden. Mit diesem gesagt, es kauft wahrscheinlich Sie nicht viel, es sei denn, Sie verwenden es, um eine Massenübertragung anzuhalten, damit Sie etwas zeitkritischeres tun können. – dgatwood

Verwandte Themen