C#やモバイルアプリ関係のログ

C#やXamarin、スマートフォンアプリのことを書いておきたいと思います

Xamarin.Formsのライフサイクルで画面の処理を行いたい

Xamarin.Formsのライフサイクルについて

docs.microsoft.com

画面ごとに画面開始時OnAppearingと画面終了時OnDisappearingはあるけれども

①アプリをフォアグラウンドにしたとき
②バックグラウンドにしたとき

はアプリ全体で一つのイベントとして扱われているわけで、どうしたらいいかよくわかりませんでした。

とりあえず、下記のようにしています。

下記、サンプルソースを元に記述します。

github.com

App.cs

    public partial class App : Application
    {
        public static Action OnStartAction;
        public static Action OnSleepAction;
        public static Action OnResumeAction;

        public App()
        {
            InitializeComponent();

            MainPage = new MainPage();
        }

        protected override void OnStart()
        {
            OnStartAction?.Invoke();
        }

        protected override void OnSleep()
        {
            OnSleepAction?.Invoke();
        }

        protected override void OnResume()
        {
            OnResumeAction?.Invoke();
        }
    }

画面はこう

MainPage.xaml.cs

protected override void OnAppearing()
{
    base.OnAppearing();

    //OnResume()
    App.OnResumeAction = () => DisplayAlert("メッセージ", "OnResume()", "OK");
}

protected override void OnDisappearing()
{
    base.OnDisappearing();

    App.OnResumeAction = null;
}

これでアプリがフォアグラウンドになったときメッセージダイアログを出すようにしています。