App's Life Cycle
アプリケーションライフサイクル
アプリケーションのライフサイクルとは、アプリケーションの実行、終了、およびアプリケーションのForeground、Background状態にあるときに、システムで発生するイベントがアプリケーションの状態を変化させる一連のプロセスです.
1. Background
アプリケーションが画面に表示されない
機能をできるだけ少なく実行します.
画面の外にあるので、できるだけ何もしないでください.
2. Foreground
画面上のアプリケーションの状態
アプリケーションの実行時に発生した状況
Main Run Loop
Main Run Loopは,ユーザによるイベントを処理するプロセスである.
UIアプリケーションオブジェクトは、アプリケーション実行時にMain Run Loopを実行します.
ビューに関連するイベントまたはビューの更新にMain Run Loopを使用します.
Main Run Loopは、Viewに関連付けられているため、Mainスレッドで実行されます.

イベントの処理順序
1.プレイヤーがアクティビティをトリガーします.(タッチ、フラッシュ等の操作)
2.システムでイベントを生成します.
3.UImitフレームワークで生成されたポートにアクティビティを送信します.
4.アクティビティはアプリケーション内にキュー形式で格納されます.
5.イベントキュー内のイベントが1つずつMain Run Loopにマッピングされる.
6.UIアプリケーションオブジェクトは、最初に実行すべきイベントを決定します.
AppDelegateとSceneDelegate
IOS 12以降
ウィンドウを1つ適用!
AppDelegateは2つのライフサイクルを管理します.
IOS 13以降
ウィンドウの概念はシーンに取って代わられ、1つのアプリケーションに複数のシーンがあることができます.

AppDelegateおよびSceneDelegate管理ライフサイクル
セッションライフサイクルはSceneに関する情報を管理します.
Scene概念が生まれた原因
マルチウィンドウ環境を提供する最大の理由.
iPhoneはマルチウィンドウ機能を提供していませんが、ipadはマルチウィンドウ機能を提供しています.
以前は、アプリケーションにUIインスタンスがありました.
1つのアプリケーションで複数のUIインスタンスを持つ形態を作成するためにSceneの概念が現れた.
例えば、iPadで分割画面を使用する場合、一つの画面で使用したい内容を別の画面にも反映させたい場合は、コメントアプリ、スケジュールアプリなどを使用することができます.
マルチウィンドウとは?
1つのアプリケーションに複数のウィンドウ(UI instance)があることを示します.
クロムのような新しいウィンドウボタン.アプリケーションは1つしかありませんが、2つの異なる画面が表示されます.
SceneDelegate.swiftファイル
各Sceneのライフサイクルを管理します.
UISceneDelegate
@MainActor protocol UISceneDelegate
シーンのライフサイクル
1. scene()
@MainActor protocol UISceneDelegate
AppDelegate.swiftファイル
UIApplicationDelegate
@MainActor protocol UIApplicationDelegate
アプリケーションライフサイクルイベントへの応答(IOS 12以降)

1. Not Running
2. Inactive
スクリーンライフサイクルベースのイベント処理(IOS 13以降)

1. Unattached
3. Foreground Active
アプリケーション使用中に他のアプリケーションを実行したり、ホームページにアクセスしたりしたときの状態.
Backgroundで実行されるコードを追加すると、Suspend状態に移行することなくバックグラウンド状態が維持されます.
最初からBackground状態で実行されているアプリケーションはInactiveではなく、Background状態に入ります.(音楽が再生されたら、スクリーンから離れても音楽が再生できます)
準備は?なぜバックグラウンドで言語タッチを使うことができますか?
バックグラウンド機能には予定タスクなどの機能があり、時間が経てばそれを指定できるようになります
Reference
この問題について(App's Life Cycle), 我々は、より多くの情報をここで見つけました https://velog.io/@malrang-malrang/Apps-Life-Cycleテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol