まず最初に、私の質問がダミーだと思われる場合に備えて申し訳ありません。私は iOS とマルチスレッドが初めてで、物事がどのように進んでいるかを理解したいだけです。私が知る限りdidEnterBackground
、アプリが一時停止する前に iOS が呼び出す最後の関数であり、アプリがそこから戻るまでに約 5 秒かかります。それ以外の場合、iOS はアプリを強制終了します。私は現在、そのような状況について考えています-バックグラウンドスレッド(ネットワークダウンロードなど)で発生しているタスクがあり、その完了ブロックはメインスレッドで発生します。このような
fun downloadData() {
Downloader.download(url: "someUrl") { [weak self] in // download is on the background thread
DispatchQueue.main.async { [weak self] in // switch to main
// do some stuff
}
}
}
downloadData()
が現在バックグラウンド スレッドで実行されている場合、ユーザーがホーム ボタンをタップすると、アプリがバックグラウンドに移行してdidEnterBackground
呼び出されます。メイン スレッドがコードを実行している間、didEnterBackground
downloadData
ダウンロードが完了し、その完了が呼び出され、新しいタスクがメイン スレッド キューにプッシュされます。では、この場合はどうなるでしょうか?のコードdidEnterBackground
は中断前に実行できる最後のコードであるため、 の完了ブロックに何が起こるかは、downloadData
中断の前 ( の後didEnterBackground
) にも実行されるか、ユーザーがアプリに戻ったときに実行されるか、または廃棄されますか?または、この状況はまったくあり得ませんか? ご協力いただきありがとうございます。また、私の質問が間違っていたら申し訳ありません。