Xamarin.iOS のアプリケーション ライフサイクル デモ

この記事とサンプル コードは、iOS の 4 つのアプリケーション状態に加え、状態がいつ変更されたかをアプリケーションに通知する AppDelegate メソッドの役割を示しています。 アプリケーションは、アプリの状態が変わるたびに、コンソールに更新を出力します。

サンプル アプリ

アプリでは、アプリによって状態が変更されるたびに、コンソールに向けて更新が出力されます

チュートリアル

  1. LifecycleDemo ソリューションの Lifecycle プロジェクトを開きます。

  2. AppDelegate クラスを開きます。 アプリケーションの状態がいつ変更されたのかを示すため、ログがライフサイクル メソッドに追加されています。

    public override void OnActivated(UIApplication application)
    {
        Console.WriteLine("OnActivated called, App is active.");
    }
    public override void WillEnterForeground(UIApplication application)
    {
        Console.WriteLine("App will enter foreground");
    }
    public override void OnResignActivation(UIApplication application)
    {
        Console.WriteLine("OnResignActivation called, App moving to inactive state.");
    }
    public override void DidEnterBackground(UIApplication application)
    {
        Console.WriteLine("App entering background state.");
    }
    // not guaranteed that this will run
    public override void WillTerminate(UIApplication application)
    {
        Console.WriteLine("App is terminating.");
    }
    
  3. シミュレーターまたはデバイスでアプリケーションを起動します。 アプリが起動すると、OnActivated が呼び出されます。 アプリケーションは "アクティブ" 状態になっています。

  4. シミュレーターまたはデバイスの [ホーム] ボタンを選んで、アプリケーションをバックグラウンドにします。 アプリが Active から Inactive に、さらに Backgrounded 状態へと遷移すると、OnResignActivationDidEnterBackground が呼び出されます。 バックグラウンドで実行するように設定されているアプリケーション コードはないため、アプリケーションはメモリ内で "一時停止している" ものと見なされます。

  5. アプリに戻り、フォアグラウンドに戻します。 WillEnterForegroundOnActivated の両方が呼び出されます。

    コンソールに出力される状態の変更

    アプリケーションがバックグラウンドからフォアグラウンドに移行し、画面に表示されるテキストを変更すると、ビュー コントローラーの次のコード行が実行されます。

    UIApplication.Notifications.ObserveWillEnterForeground ((sender, args) => {
        label.Text = "Welcome back!";
    });
    
  6. [ホーム] ボタンを押して、アプリケーションをバックグラウンドにします。 次に、[ホーム] ボタンをダブルタップして、アプリケーション スイッチャーを起動します。 iPhone X で、画面の下から上にスワイプします。

    アプリケーション スイッチャー

  7. アプリ スイッチャーでアプリケーションを見つけ、上にスワイプして削除します (iOS 11 では、隅に赤いアイコンが表示されるまで長押しします)。

    上にスワイプして実行中のアプリを削除する

iOS はアプリケーションを終了します。 アプリケーションは既にバックグラウンドで "一時停止" されているため、WillTerminate は呼び出されないことに注意してください。