私のアプリはバックグラウンドの場所の更新をサポートしています(特に重要な場所の監視が必要です)。iOSアプリがバックグラウンドで起動されたときにUIを避けるべきですか?
アプリがバックグラウンド()であることを識別すると、UI(コントローラなどを介して)が読み込まれないようにする必要がありますか?
私の意図は、バックグラウンドで重いUIの読み込み(BIGアプリ)を避けることです。これは、実際には場所の更新に応答するためにバックグラウンドにある限られた時間を無駄にする可能性があります。
例えば(にObjCではなく、質問はスウィフトのためでもある)、のは、私が初期化され、全体のコントローラ/ビュー階層を保持しているいくつかのRootViewController
を持っているとしましょう、私は、viewDidLoad
で実行する必要があります。
if ([UIApplication sharedApplication].applicationState == UIApplicationStateBackground) {
// Root view controller loaded while in background, so doing only background stuff
[self justDoBackgroundStuffWithoutUI];
} else {
// Root view controller loaded normally, so loading normal UI
[self initializeUIAndChildControllers];
}
?または、iOSがバックグラウンド状態にあることを知っているので、これらのUIタスクをすべて無視するだけで「信頼する」必要がありますか?
これを処理するためにiOSを信頼することはできますが、osに組み込まれたUIをバックグラウンド状態でレンダリングすることはありません。基礎となるUIKitフレームワークは、アプリケーションが実際にレンダリングする必要があるかどうかを決定します。ビューコントローラのアプリケーションライフサイクルイベントは、ほとんどの場合、ユーザーインタラクションに応答します.ViewDidLoadとviewDidAppearが実行されると、残りの部分は実際に実行されます。アプリがフォアグラウンドにない間は実行されません。 – Scriptable
私のコントローラーが、例えば 'viewDidLoad'で自動的にたくさんの画像をダウンロードしているとすれば、それは私が推測しているように、OSによって無視されないでしょう。おそらく 'UIImageView'aはレンダリングされませんが、データと' UIImage'sが実際にロードされます。 – mllm
この場合、ネットワークは依然として「必要があります」と要求しますが、アプリケーションがバックグラウンドになると、残りのタスクは一時停止/終了する前に完了した時間が限られます。それは無期限に実行し続けるだけではありません。 – Scriptable