web-dev-qa-db-ja.com

アプリの強制終了とアプリの再起動後にNSURLSessionのダウンロードプロセスを再開するにはどうすればよいですか?

サーバーからかなり大きなファイルをダウンロードするためにNSURLSessionを実装しました。これで、フォアグラウンドまたはバックグラウンドで作業していてアプリに戻る限り、トランザクションは機能し、終了しています。

しかし、マルチタスク画面を使用してアプリをforce-quitした場合は、アプリを再度開きます。ドキュメントから理解したように、ダウンロードプロセスは完了していませんが、ここではドキュメントの内容を確認する必要があります。

IOSアプリがシステムによって終了されて再起動された場合、アプリは同じ識別子を使用して新しい構成オブジェクトとセッションを作成し、終了時に進行中だった転送のステータスを取得できます。この動作は、システムによるアプリの通常の終了にのみ適用されます。ユーザーがマルチタスク画面からアプリを終了すると、システムはセッションのバックグラウンド転送をすべてキャンセルします。さらに、システムは、ユーザーによって強制終了されたアプリを自動的に再起動しません。 転送を再開する前に、ユーザーはアプリを明示的に再起動する必要があります

force-quitが再開される前に、アプリを再起動した場合の意味ですか、それともそうですか?これを機能させるためにコミットする必要のある追加の操作はありますか?

UPDATE:私はこのプロジェクトに出くわしました: https://github.com/Heikowi/HWIFileDownload#force-quit

それは次のように述べています。

強制終了

ユーザーがアプリを強制終了した後、ダウンロードはバックグラウンドで続行されません。 iOS 7(およびそれ以降)では、履歴書データが返されます。

つまり、アプリケーションがバックグラウンドでユーザーによって強制終了された場合でも、履歴書データを受信する方法があります。プロジェクトだけがObjective-Cで書かれていて、これを達成するために彼らが何をしているのか理解できません。

16
Emil Adz

強制終了後:終了します。

 NSURLSessionTaskDelegate - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error

アプリの再起動時にデリゲートメソッドが呼び出されます。ダウンロードタスクを再開できる場合、エラーオブジェクトには再開データが含まれます。

[error.userInfo objectForKey:NSURLSessionDownloadTaskResumeData]

このデータを使用して、次のコマンドでNSURLSessionDownloadTaskを作成することにより、ダウンロードプロセスを再開できます。

(NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData*)resumeData.

詳細については、 カスタムデリゲートを使用したURLセッションのライフサイクル 、ステップ13を参照してください。

25
Fabio Felici

アプリケーションが強制終了した後、最初からやり直す必要があると思います(。

ユーザーがアプリを終了すると、システムは保留中のタスクをキャンセルします。

そして

バックグラウンドセッションに関連付けられているすべてのタスクが完了すると、システムは終了したアプリを再起動します(sessionSendsLaunchEventsプロパティがYESに設定され、ユーザーがアプリを強制終了しなかったと仮定します

https://developer.Apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

1
Mike Demidov

-> URLSessionバックグラウンドを使用するセッションのダウンロードはまったく停止しません....ダウンロードを再開するために明示的にコーディングする必要はありません。

https://developer.Apple.com/reference/foundation/urlsession

このリンクでバックグラウンドセッションを確認してください...静止画を取得できない場合は...コメントしてください。詳細をお知らせします。

0