2016-12-03 5 views
2

アプリがフェッチ背景に依存していると、フェッチされたデータが空でない場合は、いくつかの処理を行う必要がある場合は、それが何を意味を成さない:バックグラウンドフェッチ中にバックグラウンドタスクとバックグラウンドタスクを使用するのは意味がありますか?

1)backgroundSessionConfigurationWithIdentifierを使用して(背景NSURLSessionでデータをフェッチ)

2 )はバックグラウンドタスクのデータを処理します(beginBackgroundTaskを使用)

システムはバックグラウンドフェッチを完了するのに30秒を与えるので、#1または#2のどちらも本当に必要でないようです。ドキュメント(https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html)は、これらの技術を組み合わせることができるかどうかについては明示的に言及していないので、私は確認を求めるだけです。

答えて

2

すべての権利は、バックグラウンドで掘り下げた後でも、私はまだ疑問に思っている人には少なくとも部分的に自分の質問に答えることができると思います。

  1. 背景背景設定のNSURLSession

    • で取得アプリがフェッチ背景中にダウンロードを完了するためにだけ30秒を持っています。 全体のダウンロードフローにこの制限よりも時間がかかりすぎる場合は、 デフォルトのURLセッション(バックグラウンド構成なし)を使用しても問題ありません。

    • リソースが大きい場合は、準備のために30秒(またはそれ以下)を費やし、 URLSessionをバックグラウンド構成で開始するのには完璧な意味合いがあります( )。設定が完了したら、 NSURLSessionオブジェクトは、ダウンロード タスクをシステムにシームレスに渡すため、リソース転送は30秒の完了制限のサブタイトル になりません。

  2. 背景には、バックグラウンドタスクアプリは、比較的長い実行中のタスクを完了するためには、せいぜい3分で停止を遅らせることができ、バックグラウンドタスク(例えば、短いファイルのアップロードを使用して

    • を取得、ダウンロード、ファイルI/Oなど)をユーザがフォアグラウンドにいる間に開始することができる。
    • StackOverflowで利用できる多くの例とは異なり、アプリがバックグラウンドに移動するまで待つ必要はありません。アプリがフォアグラウンドで実行されている間でも、beginBackgroundTask/endBackgroundTask内で実行される時間は3分未満です。 beginBackgroundTask/endBackgroundTaskスコープなしでこのようなタスクを実行すると、ほとんどの場合、間違いであると主張しています。これは、applicationDidEnterBackgroundを処理するコードを作成して、 UIとのユーザー対話。
    • UIとシステムのバックグラウンドフェッチの両方でダウンロードジョブを開始したい場合は、同じコードを再利用して2つの手法を組み合わせても問題ありません。
関連する問題