2 に答える
backgroundTimeRemaining
このバックグラウンド タスクにより、ユーザーがさらに 3 分間ほどアプリを離れた後も (実際の値を確認してください)、アプリをバックグラウンドで実行し続けて、リクエストを終了させることができます。そして、バックグラウンド タスクをまだ終了していない場合、その 3 分間の終わり近くにタイムアウト ハンドラが呼び出されます。
そのため、アプリの通常のフロー中にバックグラウンド タスクを終了する場合、このタイムアウト クロージャーを呼び出す必要はありません。この閉鎖は、バックグラウンド タスクが終了したことを示す機会が得られる前にタイムアウトになったため、アプリがバックグラウンドで実行を停止する前に実行する必要がある可能性がある、土壇場での迅速なクリーンアップのみを目的としています。それは何か新しいことを始めるためではなく、最後の最後のクリーンアップのためです。そして、このタイムアウト ハンドラーでバックグラウンド タスクを必ず終了してください。バックグラウンド タスクを終了しないと、OS はアプリを一時停止するのではなく、すぐに強制終了します。多くの場合、このタイムアウト クロージャーで行う必要があるのはバックグラウンド タスクの終了だけですが、他のクリーンアップを行う必要がある場合は、ここで行うことができます。
言うまでもなく、バックグラウンド タスクを終了する必要があります (ネットワーク リクエストが終了したとき、またはアプリが通常のフローでバックグラウンド タスクを終了する機会がまだない場合はタイムアウト ハンドラーで)。そうしないと、アプリは一時停止されるだけでなく、強制終了されます。
後でユーザーがアプリを再起動したときに何が起こるかを想定することに関しては、どのアプリ デリゲート メソッドが呼び出されるかを想定することはできません。バックグラウンド タスクを正常に終了したとしても、他の理由 (メモリ プレッシャーなど) で放棄されないという保証はありません。だから何も仮定しないでください。