UIKitでは、アプリケーションの状態(起動・終了など)に応じて処理を実行することができます。
アプリケーションのライフサイクルを管理する方法等について紹介します。
前提
フォアグランド・アプリ(画面に表示されていてユーザーが操作中のアプリ)は、ユーザーが目を向けているため、CPUを含むシステムリソースを優先するような仕組みになっています。
一方、バックグラウンド・アプリ(画面に表示されておらず、裏側で動作しているアプリ)は、出来る限り何もしない設計にしなければなりません。
アプリの状態がフォアグランドからバックグラウンドに変化した際など変化した際は、その変化に応じて動作を調整する必要があります。
アプリは、状態が変化すると適切なデリゲートオブジェクトのメソッドを呼び出されます。
ios13以降では、UIApplicationDelegateオブジェクトかUISceneDelegateオブジェクトを使用して開発ができます。
ios12以前では、UIApplicationDelegateオブジェクトを使用して開発を行います。
ios13以降で両方実装した場合は、UISceneDelegateオブジェクトのみが動作します。
scene(シーン)ベースのライフサイクル
scene(シーン)とは
scene(シーン)は、iosのアプリケーションにおいて、ユーザーインターフェース(UI)の一部を表す概念です。
iOS13からsceneの概念が導入されました。このsceneを活用することで、同じアプリを複数のウィンドウで表示し実行することが可能になります。
(※マルチウィンドウ環境が可能な場合に限ります)
ライフサイクル
- ユーザーもしくはシステムがsceneをリクエストすると、UIKitがsceneを作成します。
- ユーザーが要求した場合は、前面に移動し画面上に表示されます。
- システムが要求した場合は、バックグラウンド状態にします。
- ユーザーがアプリのUIを閉じた際は、UIKitが関連するsceneをバックグラウンド状態にし、最終的には一時停止状態にします。
その他のライフサイクルについては、マニュアルページをご確認ください。
sceneが行う処理
- UIKit は、まずsceneの初期 UI を構成し、sceneに必要なデータを読み込みます。
- フォアグラウンド アクティブ状態に移行するとき(アプリを起動し画面表示するとき)は、画面に表示するUIを構成し、ユーザーの操作に応えれるようにします。
- フォアグラウンド アクティブ状態を終了したとき(アプリを閉じたとき)は、データを保存しアプリの動作を停止します。
- バックグラウンド状態のときは、重要なタスクを終了とできるだけ多くのメモリ解放を行い、アプリのスナップショット(画面キャプチャ)を取得します。取得したスナップショットはアプリスイッチャーに表示されます。
- sceneの切断時に、sceneに紐づいていたリソースを解放します。
app(アプリケーション)ベースのライフサイクル
appベースについて
ios12以前やsceneをサポートしていないアプリでは、すべてのライフサイクルイベントをUIApplicationDelegateオブジェクトで行います。
ライフサイクル
- フォアグラウンド アクティブ状態に移行するとき(アプリを起動し画面表示するとき)は、アプリをアクティブ状態にします。
- アプリは起動していて、画面に表示されていないときは、バックグラウンド状態にします。
UIApplicationDelegateで実装しなければいけないこと
上記のライフサイクルのイベント処理に加え、アプリには下記イベントの処理も考慮する必要があります。
これらのイベントを処理するには、UIApplicationDelegateを用います。
メモリ不足による警告
アプリのメモリ使用量が多すぎる場合に処理をさせることが出来ます。
デバイスのロック・解除
デバイス側でパスワードロックがかかった際(画面が消された際)や、ロック画面が解除された際に、処理をさせることができます。
デバイス間でタスクを引き継ぐ
iosには、デバイス間で現在の操作内容を共有することが出来ます。
システム日付や端末の時間が変更されたら処理
下記場合に処理をさせることが可能です。
- 日付を跨いだタイミングで処理をさせたい場合
- ユーザーが端末の時刻設定を変更した場合
- 端末のタイムゾーンが変更された場合
- サマータイムが始まった・終わった場合
アプリのURL(ユニバーサルリンク)でアプリを起動されたら処理
URLを基にどの画面へ遷移させるか処理できます。
コメント