App's Life Cycle


アプリケーションライフサイクル


アプリケーションのライフサイクルとは、アプリケーションの実行、終了、およびアプリケーションのForeground、Background状態にあるときに、システムで発生するイベントがアプリケーションの状態を変化させる一連のプロセスです.
1. Background
アプリケーションが画面に表示されない
機能をできるだけ少なく実行します.
画面の外にあるので、できるだけ何もしないでください.
2. Foreground
画面上のアプリケーションの状態

アプリケーションの実行時に発生した状況

  • UIApplication
  • @UIアプリケーションMainまたは@Main言語宣言を含むクラスを見つけ、AppDelegateオブジェクト
  • を作成します.
  • Main Event Loop(タッチ、テキスト入力等のユーザ動作を受け付けるループ)
  • を実行する.

    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つのライフサイクルを管理します.
  • process LifeCycle
  • UI LifeCycle
  • IOS 13以降


    ウィンドウの概念はシーンに取って代わられ、1つのアプリケーションに複数のシーンがあることができます.

    AppDelegateおよびSceneDelegate管理ライフサイクル
  • AppDelegate
  • Process LifeCycle
  • Session LifeCycle
  • SceneDelegate
  • UI LifeCycle
  • AppDelegateの機能はSceneDegateに分離され、AppDegateでSession LifeCycleという新しいサイクルを担当します.
    セッションライフサイクルはSceneに関する情報を管理します.

    Scene概念が生まれた原因


    マルチウィンドウ環境を提供する最大の理由.
    iPhoneはマルチウィンドウ機能を提供していませんが、ipadはマルチウィンドウ機能を提供しています.
    以前は、アプリケーションにUIインスタンスがありました.
    1つのアプリケーションで複数のUIインスタンスを持つ形態を作成するためにSceneの概念が現れた.
    例えば、iPadで分割画面を使用する場合、一つの画面で使用したい内容を別の画面にも反映させたい場合は、コメントアプリ、スケジュールアプリなどを使用することができます.

    マルチウィンドウとは?


    1つのアプリケーションに複数のウィンドウ(UI instance)があることを示します.
    クロムのような新しいウィンドウボタン.アプリケーションは1つしかありませんが、2つの異なる画面が表示されます.

    SceneDelegate.swiftファイル


    各Sceneのライフサイクルを管理します.

    UISceneDelegate

    @MainActor protocol UISceneDelegate
    シーンのライフサイクル
    1. scene()
  • シーンがアプリケーションに追加されたときに呼び出される
  • sceneDidDisconnect()
  • シーン切断時に呼び出す
  • sceneDidBecomeActive()
  • シーンアクティブ時に呼び出す
  • sceneWillResignActive()
  • シーン停止時に呼び出す
  • sceneWillEnterForeground()
  • シーンを実行し、ユーザに表示するときに
  • を呼び出す.
  • sceneDidEnterBackground()
  • シーンがバックグラウンドで実行中で、表示されなくなったときに
  • が呼び出されます.

    AppDelegate.swiftファイル

  • アプリケーションの重要なデータ初期化
  • アプリケーションのシーン優先パラメータ
  • アプリケーション外からのアラーム(バッテリ不足、ダウンロード完了など)
  • に応答する.
  • アプリケーション自身のターゲットイベントに対する応答
  • 、特定のシーン、ビュー、ビューアに限定されない
  • プッシュサービス等の実行を要求するサービス登録
  • .

    UIApplicationDelegate

    @MainActor protocol UIApplicationDelegate

    アプリケーションライフサイクルイベントへの応答(IOS 12以降)



    1. Not Running
  • アプリケーションが実行されていないか、または完全に停止していて実行されていない
  • .
    2. Inactive
  • アプリケーションを起動すると、アプリケーションのデータ構造とUIが初期化されます.
  • 3. Active
  • アプリケーションが実行中であり、アクティビティを受信できます.
  • Foregroundの一般的な状態.
  • 4. Active -> Inactive
  • Foregroundアクティビティから離れると、データが保存され、アプリケーションの操作が停止します.
  • 5. Background
  • アプリケーション使用中に他のアプリケーションを実行したり、ホームページにアクセスしたりしたときの状態.
  • Backgroundで実行されるコードを追加すると、Suspend状態に移行することなくバックグラウンド状態が維持されます.
  • 最初からBackground状態で実行されているアプリケーションはInactiveによってBackground状態に入ります.
  • 6. Suspended
  • アプリケーションは、Background状態で、さらなる作業をしないとSuspend状態になります.
  • アプリケーションを再実行すると、メモリがリフレッシュされ、実行速度が速くなります.
  • メモリが不足している場合、IOSはsuspend状態のアプリケーションをメモリから解放します.
  • スクリーンライフサイクルベースのイベント処理(IOS 13以降)



    1. Unattached
  • ユーザーまたはシステムがアプリケーションに新しいシーンを要求すると、UIkitは、シーンがアプリケーションに接続されたときにシーンの初期UIを構成し、シーンに必要なデータをロードします.
  • ユーザーがSceneを要求するとForegroundに移動します.
  • システムがSceneを要求した場合、Backgroundに移動します.
  • 2. Foreground Inactive
  • Foregroundアクティビティ前の短いステップ
  • のアクティブ状態に切り替わると、UIが構成され、ユーザと対話する準備ができます.
  • アプリケーションは実行中ですが、アクティビティは受け入れられません.
  • 特定の通知ウィンドウ(
  • 通知など)は、アプリケーションがイベントを受信できないように画面を上書きします.
    3. Foreground Active
  • アプリケーションが実行中であり、アクティビティを受信できます.
  • Foregroundの一般的な状態.
  • 4. Foreground Active -> Foreground Inactive
  • Foregroundアクティビティから離れると、データが保存され、アプリケーションの操作が停止します.
  • 5. Background

  • アプリケーション使用中に他のアプリケーションを実行したり、ホームページにアクセスしたりしたときの状態.

  • Backgroundで実行されるコードを追加すると、Suspend状態に移行することなくバックグラウンド状態が維持されます.

  • 最初からBackground状態で実行されているアプリケーションはInactiveではなく、Background状態に入ります.(音楽が再生されたら、スクリーンから離れても音楽が再生できます)

  • 準備は?なぜバックグラウンドで言語タッチを使うことができますか?

  • バックグラウンド機能には予定タスクなどの機能があり、時間が経てばそれを指定できるようになります
  • 6. Suspended
  • アプリケーションは、Background状態で、さらなる作業をしないとSuspend状態になります.
  • アプリケーションを再実行すると、メモリがリフレッシュされ、実行速度が速くなります.
  • メモリが不足している場合、IOSはsuspend状態のアプリケーションをメモリから解放します.