iOSアプリでは常に以前に呼び出さapplicationDidEnterBackground
れますか?それが常に(マルチタスク)と呼ばれるわけではないことはapplicationWillTerminate
知っていますが、呼び出されると、常に最初に呼び出されますか?マルチタスクをサポートするアプリの場合、コードがすでに含まれている場合は、コードを含めることで不必要にコードを複製したくありません。applicationWillTerminate
applicationDidEnterBackground
applicationWillTerminate
applicationDidEnterBackground
1 に答える
iOS 4.0以降applicationDidEnterBackground
では、代わりにが呼び出されるapplicationWillTerminate
ため、両方を呼び出す必要はありません。Appleドキュメントの一部は次のとおりです。
討論
iOS 4.0以降では、ユーザーがバックグラウンド実行をサポートするアプリケーションを終了すると、applicationWillTerminate:メソッドの代わりにこのメソッドが呼び出されます。この方法を使用して、共有リソースを解放し、ユーザーデータを保存し、タイマーを無効にし、アプリケーションが後で終了した場合に備えて、アプリケーションを現在の状態に復元するのに十分なアプリケーション状態情報を保存する必要があります。また、アプリケーションのユーザーインターフェイスの更新を無効にし、一部の種類の共有システムリソース(ユーザーの連絡先データベースなど)の使用を避ける必要があります。また、バックグラウンドでOpenGLESを使用しないようにすることも不可欠です。
このメソッドの実装には、タスクを実行して戻るのに約5秒かかります。最終タスクを実行するために追加の時間が必要な場合は、beginBackgroundTaskWithExpirationHandler:を呼び出して、システムに追加の実行時間を要求できます。実際には、applicationDidEnterBackground:からできるだけ早く戻る必要があります。時間がなくなる前にメソッドが戻らない場合、アプリケーションは終了し、メモリから削除されます。
このメソッドを終了する前に、ユーザーインターフェイスの調整に関連するタスクを実行する必要がありますが、他のタスク(状態の保存など)は、必要に応じて同時ディスパッチキューまたはセカンダリスレッドに移動する必要があります。applicationDidEnterBackground:で開始するバックグラウンドタスクは、そのメソッドが終了するまで実行されない可能性が高いため、これらのタスクを開始する前に、追加のバックグラウンド実行時間を要求する必要があります。つまり、最初にbeginBackgroundTaskWithExpirationHandler:を呼び出してから、ディスパッチキューまたはセカンダリスレッドでタスクを実行します。
また、アプリケーションは、このメソッドを呼び出すのとほぼ同時にUIApplicationDidEnterBackgroundNotification通知を送信して、対象のオブジェクトに遷移に応答する機会を与えます。
バックグラウンドに適切に移行する方法、および終了時にバックグラウンドタスクを開始する方法の詳細については、「iOSアプリプログラミングガイド」を参照してください。
これがあなたの問題を解決するのに役立つことを願っています。エイドリアン
これは、開発者セクションで入手できるテクニカルノートへのリンクです。ネットワーキングとマルチタスクを扱っています。このドキュメントで使用されている実際の方法は、iOS 5以降、ネットワークが自動的に応答しなくなった場合にアプリを終了するウォッチドッグapplicationDidEnterBackground
と呼ばれるシステムのみを扱います。したがって、アプリが終了する前にアプリがタスクを完了できるようにするために、実際にコードを呼び出して実行しようとする必要はありません。アプリはバックグラウンドに入り、最後のタスクが完了するまでタスクを続行します。それが理にかなっていることを願っていますが、ここにリンクがあります。ウォッチドッグのセクションをお読みください。
https://developer.apple.com/library/ios/#technotes/tn2277/_index.html#//apple_ref/doc/uid/DTS40010841applicationWillTerminate
お役に立てれば。:)