アプリのライフサイクル
.NET Multi-platform App UI (.NET MAUI) アプリには、通常、未実行、実行中、非アクティブ、停止の 4 つの実行状態があります。 .NET MAUI では、アプリが未実行状態から実行中の状態、実行中の状態から非アクティブ状態、非アクティブ状態から停止状態、停止状態から実行中状態、停止状態から未実行状態に遷移すると、Window
クラスでクロスプラットフォーム ライフサイクル イベントが発生します。
次の図は、.NET MAUI アプリのライフサイクルの概要を示しています。
図の灰色の楕円は、アプリがメモリに読み込まれていないことを示しています。 水色の楕円は、アプリがメモリ内にあることを示します。 円弧上のテキストは、.NET MAUI で発生するイベントを示しています。これらのイベントは、実行中のアプリに通知を提供します。
アプリの実行状態は、アプリの履歴によって異なります。 たとえば、アプリが初めてインストールされたとき、またはデバイスが起動された場合、アプリは未実行と見なすことができます。 アプリが起動されると、Created
イベントと Activated
イベントが発生し、アプリが実行中になります。 別のアプリ ウィンドウがフォーカスを取得すると、Deactivated
イベントが発生し、アプリが非アクティブになります。 ユーザーが別のアプリに切り替えるか、デバイスのホーム画面に戻ってアプリ ウィンドウが非表示になると、Deactivated
イベントと Stopped
イベントが発生し、アプリは停止になります。 ユーザーがアプリに戻ると、Resuming
イベントが発生し、アプリが実行中になります。 実行中にユーザーがアプリを終了する場合もあります。 この状況では、アプリが非アクティブになった後で停止になり、Destroying
イベントが発生し、アプリが未実行になります。 同様に、デバイスが、リソースの制限によりアプリの停止中にアプリを終了する場合があり、その場合は Destroying
イベントが発生し、アプリが未実行になります。
さらに、.NET MAUI を使用すると、プラットフォーム ライフサイクル イベントが発生したときにアプリで通知を受け取ることができます。 詳細については、「プラットフォーム ライフサイクル イベント」をご覧ください。
クロスプラットフォーム ライフサイクル イベント
Window
クラスは、次のクロスプラットフォーム ライフサイクル イベントを定義します。
イベント | 説明 | 実行するアクション |
---|---|---|
Created |
このイベントは、ネイティブ ウィンドウが作成された後に発生します。 この時点で、クロスプラットフォーム ウィンドウにはネイティブ ウィンドウ ハンドラーがありますが、ウィンドウがまだ表示されていない可能性があります。 | |
Activated |
このイベントは、ウィンドウがアクティブ化され、フォーカスされたウィンドウであるか、またはウィンドウになると発生します。 | |
Deactivated |
このイベントは、ウィンドウがフォーカスされなくなると発生します。 ただし、ウィンドウは引き続き表示されている可能性があります。 | |
Stopped |
このイベントは、ウィンドウが表示されなくなると発生します。 オペレーティング システムがアプリを終了させている可能性があるため、この状態からアプリが再開する保証はありません。 | 実行時間の長いプロセスから切断するか、デバイス リソースを消費する可能性がある保留中の要求を取り消します。 |
Resumed |
このイベントは、停止後にアプリが再開されたときに発生します。 このイベントは、アプリの初回起動時には発生せず、Stopped イベントが以前に発生した場合にのみ発生します。 |
必要なイベントをサブスクライブし、表示されているページ上にあるすべてのコンテンツを更新します。 |
Destroying |
このイベントは、ネイティブ ウィンドウが破棄され割り当てが解除されると発生します。 アプリが再度開かれたときに、同じクロスプラットフォーム ウィンドウが新しいネイティブ ウィンドウに対して使用される場合があります。 | ネイティブ ウィンドウにアタッチしたイベント サブスクリプションをすべて削除します。 |
これらのクロスプラットフォーム イベントは、異なるプラットフォーム イベントにマッピングされます。このマッピングを次の表に示します。
イベント | Android | iOS | Windows |
---|---|---|---|
Created |
OnPostCreate |
FinishedLaunching |
Created |
Activated |
OnResume |
OnActivated |
Activated (CodeActivated と PointerActivated ) |
Deactivated |
OnPause |
OnResignActivation |
|
Stopped |
OnStop |
DidEnterBackground |
VisibilityChanged |
Resumed |
OnRestart |
WillEnterForeground |
Resumed |
Destroying |
OnDestroy |
WillTerminate |
Closed |
さらに、Window
クラスには、iOS と Mac Catalyst でウィンドウが閉じられたりバックグラウンド状態になったりすると発生する、Backgrounding
イベントも定義されています。 このイベントには BackgroundingEventArgs
オブジェクトが付随し、任意の string
状態が BackgroundingEventArgs
オブジェクトの State
プロパティに対して保持される必要があります。このオブジェクトは、ウィンドウを再開するまで OS で保持されます。 ウィンドウが再開されると、CreateWindow
オーバーライドの IActivationState
引数から状態が提供されます。
これらのイベントに加えて、Window
クラスには次のオーバーライド可能なライフサイクル メソッドもあります。
OnCreated
:Created
イベントの発生時に呼び出されます。OnActivated
:Activated
イベントの発生時に呼び出されます。OnDeactivated
:Deactivated
イベントの発生時に呼び出されます。OnStopped
:Stopped
イベントの発生時に呼び出されます。OnResumed
:Resumed
イベントの発生時に呼び出されます。OnDestroying
:Destroying
イベントの発生時に呼び出されます。OnBackgrounding
:Backgrounding
イベントの発生時に呼び出されます。
Window
ライフサイクル イベントをサブスクライブするには、App
クラス内の CreateWindow
メソッドをオーバーライドして、イベントをサブスクライブできる Window
インスタンスを作成します。
namespace MyMauiApp
{
public partial class App : Application
{
public App()
{
InitializeComponent();
MainPage = new MainPage();
}
protected override Window CreateWindow(IActivationState? activationState)
{
Window window = new Window(new AppShell());
window.Created += (s, e) =>
{
// Custom logic
};
return window;
}
}
}
namespace MyMauiApp
{
public partial class App : Application
{
public App()
{
InitializeComponent();
}
protected override Window CreateWindow(IActivationState activationState)
{
Window window = base.CreateWindow(activationState);
window.Created += (s, e) =>
{
// Custom logic
};
return window;
}
}
}
また、ライフサイクルのオーバーライドを使用するには、Window
クラスから派生するクラスを作成します。
namespace MyMauiApp
{
public class MyWindow : Window
{
public MyWindow() : base()
{
}
public MyWindow(Page page) : base(page)
{
}
protected override void OnCreated()
{
// Register services
}
}
}
Window
から派生したクラスは、App
クラス内の CreateWindow
メソッドをオーバーライドして MyWindow
インスタンスを返すことで利用できるようになります。
警告
App.MainPage
プロパティが設定され、Page 引数を受け取るオーバーライドを使用して CreateWindow
メソッドが Window
オブジェクトを作成すると、InvalidOperationException
がスローされます。
プラットフォーム ライフサイクル イベント
.NET MAUI は、発生しているプラットフォーム ライフサイクル イベントに応答して呼び出されるデリゲートを定義します。 これらのデリゲートには、名前付きメソッドまたは匿名関数を使用してハンドラーを指定できます。これは、デリゲートが呼び出されたときに実行されます。 このメカニズムにより、一般的なプラットフォーム ライフサイクル イベントが発生したときにアプリに通知を送ることができます。
重要
ConfigureLifecycleEvents
メソッドは、Microsoft.Maui.LifecycleEvents
名前空間内にあります。
Android
次の表は、Android ライフサイクル イベントが発生した場合に呼び出される .NET MAUI デリゲートの一覧です。
委任 | 引数 | 説明 | Comments |
---|---|---|---|
OnActivityResult |
自身が起動したアクティビティが終了したときに呼び出されます。 | ||
OnApplicationConfigurationChanged |
$ | コンポーネントの実行中にデバイス構成が変更されたときに呼び出されます。 | |
OnApplicationCreate |
Android.App.Application |
アプリが起動されたときに、アクティビティ、サービス、またはレシーバー オブジェクト (コンテンツ プロバイダーを除く) が作成される前に呼び出されます。 | |
OnApplicationCreating |
Android.App.Application |
アプリの起動中、アクティビティ、サービス、またはレシーバー オブジェクト (コンテンツ プロバイダーを除く) が作成される前に呼び出されます。 | |
OnApplicationLowMemory |
Android.App.Application |
システムがメモリ不足の状態で実行されていて、アクティブに実行中のプロセスのメモリ使用量を削減する必要がある場合に呼び出されます。 | |
OnApplicationTrimMemory |
$ | 不要なメモリをプロセスから削減するのに適したタイミングであるとオペレーティング システムが判断したときに呼び出されます。 | |
OnBackPressed |
Android.App.Activity |
アクティビティで、バック キーが押されたことを検出したときに呼び出されます。 | |
OnConfigurationChanged |
$ | アクティビティの実行中にデバイス構成が変更されたときに呼び出されます。 | |
OnCreate |
$ | アクティビティの作成時に発生します。 | |
OnDestroy |
Android.App.Activity |
アクティビティが終了するとき、またはシステムが領域を節約するためにアクティビティ インスタンスを一時的に破棄しているときに呼び出されます。 | 常にスーパー クラスの実装を呼び出します。 |
OnNewIntent |
$ | アクティビティの新しいインスタンスを開始する代わりに、アクティビティ スタックの最上位でアクティビティが再起動されたときに呼び出されます。 | |
OnPause |
Android.App.Activity |
アクティビティがバックグラウンドに移行中で、まだ強制終了されていない場合に呼び出されます。 | 常にスーパー クラスの実装を呼び出します。 |
OnPostCreate |
$ | アクティビティの起動が完了し、OnStart と OnRestoreInstanceState が呼び出された後に呼び出されます。 |
常にスーパー クラスの実装を呼び出します。 これはシステム専用のイベントであり、通常はアプリでは使用しません。 |
OnPostResume |
Android.App.Activity |
アクティビティの再開が完了したとき、OnResume が呼び出された後に呼び出されます。 |
常にスーパー クラスの実装を呼び出します。 これはシステム専用のイベントであり、通常はアプリで使用しないでください。 |
OnRequestPermissionsResult |
アクセス許可を要求した結果のコールバックとして呼び出されます。 | ||
OnRestart |
Android.App.Activity |
OnStop の後、現在のアクティビティがユーザーに再表示される (ユーザーが移動して戻ってきた) ときに呼び出されます。 |
常にスーパー クラスの実装を呼び出します。 |
OnRestoreInstanceState |
$ | アクティビティが以前に保存された状態から再初期化されるとき、OnStart の後に呼び出されます。 |
|
OnResume |
Android.App.Activity |
OnRestoreInstanceState 、OnRestart 、OnPause の後に呼び出され、アクティビティがアクティブで、入力を受け取る準備ができていることを示します。 |
|
OnSaveInstanceState |
$ | OnCreate または OnRestoreInstanceState で状態を復元できるように、強制終了中のアクティビティからインスタンスごとの状態を取得するために呼び出されます。 |
|
OnStart |
Android.App.Activity |
OnCreate または OnRestart の後、アクティビティが停止していますが、現在ユーザーに表示されているときに呼び出されます。 |
常にスーパー クラスの実装を呼び出します。 |
OnStop |
Android.App.Activity |
アクティビティがユーザーに表示されなくなったときに呼び出されます。 | 常にスーパー クラスの実装を呼び出します。 |
重要
各デリゲートには、対応する同じ名前の拡張メソッドがあり、デリゲートのハンドラーを登録するために呼び出すことができます。
呼び出されている Android ライフサイクル デリゲートに応答するには、MauiProgram
クラスの CreateMauiapp
メソッド内の MauiAppBuilder
オブジェクトに対して ConfigureLifecycleEvents
メソッドを呼び出します。 次に、ILifecycleBuilder
オブジェクトで AddAndroid
メソッドを呼び出し、必要なデリゲートのハンドラーを登録する Action
を指定します。
using Microsoft.Maui.LifecycleEvents;
namespace PlatformLifecycleDemo
{
public static class MauiProgram
{
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder();
builder
.UseMauiApp<App>()
.ConfigureLifecycleEvents(events =>
{
#if ANDROID
events.AddAndroid(android => android
.OnActivityResult((activity, requestCode, resultCode, data) => LogEvent(nameof(AndroidLifecycle.OnActivityResult), requestCode.ToString()))
.OnStart((activity) => LogEvent(nameof(AndroidLifecycle.OnStart)))
.OnCreate((activity, bundle) => LogEvent(nameof(AndroidLifecycle.OnCreate)))
.OnBackPressed((activity) => LogEvent(nameof(AndroidLifecycle.OnBackPressed)) && false)
.OnStop((activity) => LogEvent(nameof(AndroidLifecycle.OnStop))));
#endif
static bool LogEvent(string eventName, string type = null)
{
System.Diagnostics.Debug.WriteLine($"Lifecycle event: {eventName}{(type == null ? string.Empty : $" ({type})")}");
return true;
}
});
return builder.Build();
}
}
}
Android アプリのライフサイクルの詳細については、developer.android.com の「アクティビティのライフサイクルについて」をご覧ください。
iOS と Mac Catalyst
次の表は、iOS および Mac Catalyst のライフサイクル イベントが発生した場合に呼び出される .NET MAUI のデリゲートの一覧です。
委任 | 引数 | 説明 |
---|---|---|
ApplicationSignificantTimeChange |
UIKit.UIApplication |
午前 0 時などのキャリアが変更された時刻、夏時間の開始または停止など、大幅な時間変更が発生したときに呼び出されます。 |
ContinueUserActivity |
ハンドオフを使用して別のデバイスからアクティビティを転送するなど、ユーザー アクティビティに関連付けられたデータをアプリが受信したときに呼び出されます。 | |
DidEnterBackground |
UIKit.UIApplication |
アプリがバックグラウンドに入ったときに呼び出されます。 |
FinishedLaunching |
$ | アプリが起動したときに呼び出されます。 |
OnActivated |
UIKit.UIApplication |
アプリの起動時や、アプリがフォアグラウンドに戻るたびに呼び出されます。 |
OnResignActivation |
UIKit.UIApplication |
アプリがバックグラウンドに入るとき、中断されるとき、またはユーザーが電話やテキストなどの中断を受けたときに呼び出されます。 |
OpenUrl |
$ | アプリが指定した URL を開く必要があるときに呼び出されます。 |
PerformActionForShortcutItem |
ホーム画面のクイック アクションが開始されたときに呼び出されます。 | |
PerformFetch |
$ | ダウンロードするデータがある場合に、フェッチ操作を開始できることをアプリに通知するために呼び出されます。 |
SceneContinueUserActivity |
$ | 指定したハンドオフ関連のアクティビティを処理するために呼び出されます。 |
SceneDidDisconnect |
UIKit.UIScene |
シーンがアプリから削除されたときに呼び出されます。 |
SceneDidEnterBackground |
UIKit.UIScene |
シーンがバックグラウンドで実行されていて、画面上にない場合に呼び出されます。 |
SceneDidFailToContinueUserActivity |
アクティビティを完了できなかったことをユーザーに通知するために呼び出されます。 | |
SceneDidUpdateUserActivity |
$ | 指定したアクティビティが更新されたときに呼び出されます。 |
SceneOnActivated |
UIKit.UIScene |
シーンがアクティブになり、ユーザー イベントに応答できるようになると呼び出されます。 |
SceneOnResignActivation |
UIKit.UIScene |
シーンがアクティブな状態を終了し、ユーザー イベントへの応答を停止しようとしているときに呼び出されます。 |
SceneOpenUrl |
$ | シーンが 1 つ以上の URL を開くよう要求したときに呼び出されます。 |
SceneRestoreInteractionState |
$ | アクティビティの状態を復元するために呼び出されます。 |
SceneWillConnect |
シーンがアプリに追加されたときに呼び出されます。 | |
SceneWillContinueUserActivity |
$ | ハンドオフ関連のデータを受け取る準備をするために呼び出されます。 |
SceneWillEnterForeground |
UIKit.UIScene |
シーンがフォアグラウンドで実行され、ユーザーに表示されるときに呼び出されます。 |
WillEnterForeground |
UIKit.UIApplication |
アプリがバックグラウンド状態から戻る場合に呼び出されます。 |
WillFinishLaunching |
$ | アプリの起動が開始されても、状態の復元がまだ発生していないときに呼び出されます。 |
WillTerminate |
UIKit.UIApplication |
メモリの制約のためにアプリが終了した場合、またはユーザーが直接アプリを終了した場合に呼び出されます。 |
WindowSceneDidUpdateCoordinateSpace |
シーンのサイズ、向き、または特性が変化したときに呼び出されます。 |
重要
PerformFetch
を除く各デリゲートには、同じ名前の拡張メソッドがあります。この拡張メソッドは、デリゲートのハンドラーを登録するために呼び出すことができます。
呼び出された iOS および Mac Catalyst のライフサイクル デリゲートに応答するには、MauiProgram
クラスの CreateMauiapp
メソッド内で MauiAppBuilder
オブジェクトに対して ConfigureLifecycleEvents
メソッドを呼び出します。 次に、ILifecycleBuilder
オブジェクトで AddiOS
メソッドを呼び出し、必要なデリゲートのハンドラーを登録する Action
を指定します。
using Microsoft.Maui.LifecycleEvents;
namespace PlatformLifecycleDemo
{
public static class MauiProgram
{
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder();
builder
.UseMauiApp<App>()
.ConfigureLifecycleEvents(events =>
{
#if IOS || MACCATALYST
events.AddiOS(ios => ios
.OnActivated((app) => LogEvent(nameof(iOSLifecycle.OnActivated)))
.OnResignActivation((app) => LogEvent(nameof(iOSLifecycle.OnResignActivation)))
.DidEnterBackground((app) => LogEvent(nameof(iOSLifecycle.DidEnterBackground)))
.WillTerminate((app) => LogEvent(nameof(iOSLifecycle.WillTerminate))));
#endif
static bool LogEvent(string eventName, string type = null)
{
System.Diagnostics.Debug.WriteLine($"Lifecycle event: {eventName}{(type == null ? string.Empty : $" ({type})")}");
return true;
}
});
return builder.Build();
}
}
}
iOS アプリのライフサイクルの詳細については、developer.apple.com の「Managing Your App's Life Cycl」をご覧ください。
Windows
次の表に、発生している Windows ライフサイクル イベントに応答して呼び出される .NET MAUI デリゲートを示します。
委任 | 引数 | 説明 |
---|---|---|
OnActivated |
$ | アプリの再開中以外の場合にプラットフォーム Activated イベントが発生したときに呼び出されます。 |
OnClosed |
$ | プラットフォーム Closed イベントが発生したときに呼び出されます。 |
OnLaunched |
$ | ネイティブ ウィンドウが作成されてアクティブ化されると、.NET MAUI の Application.OnLaunched オーバーライドによって呼び出されます。 |
OnLaunching |
$ | ネイティブ ウィンドウが作成されてアクティブ化される前に、.NET MAUI の Application.OnLaunched オーバーライドによって呼び出されます。 |
OnPlatformMessage |
$ | .NET MAUI が特定のネイティブ Windows メッセージを受信したときに呼び出されます。 |
OnPlatformWindowSubclassed |
$ | Win32 ウィンドウがサブクラス化されたときに .NET MAUI によって呼び出されます。 |
OnResumed |
Microsoft.UI.Xaml.Window |
アプリが再開中の場合、プラットフォーム Activated イベントが発生したときに呼び出されます。 |
OnVisibilityChanged |
$ | プラットフォーム VisibilityChanged イベントが発生したときに呼び出されます。 |
OnWindowCreated |
Microsoft.UI.Xaml.Window |
クロスプラットフォーム Window 用にネイティブ ウィンドウが作成されたときに呼び出されます。 |
.NET MAUI は、OnPlatformMessage
デリゲートを使用して、特定のネイティブ Windows メッセージをライフサイクル イベントとして公開します。 このデリゲートに付随する WindowsPlatformMessageEventArgs
オブジェクトには、uint
型の MessageId
プロパティが含まれています。 このプロパティの値を調べて、アプリ ウィンドウに渡されたメッセージを確認できます。 Windows メッセージの詳細については、「Windows メッセージ (Win32 と C++ の概要)」をご覧ください。 ウィンドウ メッセージ定数の一覧については、「ウィンドウ通知」をご覧ください。
重要
各デリゲートには、対応する同じ名前の拡張メソッドがあり、デリゲートのハンドラーを登録するために呼び出すことができます。
呼び出される Windows ライフサイクル デリゲートに応答するには、MauiProgram
クラスの CreateMauiApp
メソッドで MauiAppBuilder
オブジェクトに対して ConfigureLifecycleEvents
メソッドを呼び出します。 次に、ILifecycleBuilder
オブジェクトに対して AddWindows
メソッドを呼び出し、必要なデリゲートのハンドラーを登録する Action
メソッドを指定します。
using Microsoft.Maui.LifecycleEvents;
namespace PlatformLifecycleDemo
{
public static class MauiProgram
{
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder();
builder
.UseMauiApp<App>()
.ConfigureLifecycleEvents(events =>
{
#if WINDOWS
events.AddWindows(windows => windows
.OnActivated((window, args) => LogEvent(nameof(WindowsLifecycle.OnActivated)))
.OnClosed((window, args) => LogEvent(nameof(WindowsLifecycle.OnClosed)))
.OnLaunched((window, args) => LogEvent(nameof(WindowsLifecycle.OnLaunched)))
.OnLaunching((window, args) => LogEvent(nameof(WindowsLifecycle.OnLaunching)))
.OnVisibilityChanged((window, args) => LogEvent(nameof(WindowsLifecycle.OnVisibilityChanged)))
.OnPlatformMessage((window, args) =>
{
if (args.MessageId == Convert.ToUInt32("031A", 16))
{
// System theme has changed
}
}));
#endif
static bool LogEvent(string eventName, string type = null)
{
System.Diagnostics.Debug.WriteLine($"Lifecycle event: {eventName}{(type == null ? string.Empty : $" ({type})")}");
return true;
}
});
return builder.Build();
}
}
}
Window オブジェクトを取得する
プラットフォーム コードでは、GetWindow
拡張メソッドを使用して、プラットフォーム ライフサイクル イベントからアプリの Window
オブジェクトを取得できます。
using Microsoft.Maui.LifecycleEvents;
namespace PlatformLifecycleDemo
{
public static class MauiProgram
{
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder();
builder
.UseMauiApp<App>()
.ConfigureLifecycleEvents(events =>
{
#if WINDOWS
events.AddWindows(windows => windows
.OnClosed((window, args) =>
{
IWindow appWindow = window.GetWindow();
}));
#endif
});
return builder.Build();
}
}
}
カスタム ライフサイクル イベント
.NET MAUI では、発生中のプラットフォーム ライフサイクル イベントに応じて呼び出されるデリゲートを定義していますが、公開するのは共通のプラットフォーム ライフサイクル イベント セットのみです。 ただし、通常ライブラリ作成者を対象とするメカニズムも含まれており、これを使用して、追加のプラットフォーム ライフサイクル イベントが発生したときにアプリで通知を受け取ることもできます。 その手順は次のとおりです。
- .NET MAUI で公開されていないプラットフォーム ライフサイクル イベントのイベント ハンドラーを登録します。
- プラットフォーム ライフサイクル イベントのイベント ハンドラーで、
ILifecycleEventService
インスタンスを取得し、そのInvokeEvents
メソッドを呼び出して、プラットフォーム イベント名を引数として指定します。
次に、プラットフォーム ライフサイクル イベントの通知を受け取るアプリで、MauiAppBuilder
オブジェクトの ConfigureLifecycleEvents
メソッドを呼び出すように MauiProgram
クラスの CreateMauiApp
メソッドを変更します。 次に、ILifecycleBuilder
オブジェクトで AddEvent
メソッドを呼び出し、プラットフォーム イベントが発生したときに呼び出されるプラットフォーム イベントの名前と Action
を指定します。
例
WinUI 3 Window.SizeChanged イベントは、ネイティブ アプリ ウィンドウが最初にレンダリングされたとき、またはレンダリング サイズが変更されたときに発生します。 .NET MAUI では、このプラットフォーム イベントはライフサイクル イベントとして公開されません。 ただし、次の方法を使用して、このプラットフォーム イベントが発生したときにアプリで通知を受け取ることができます。
Window.SizeChanged プラットフォーム ライフサイクル イベントのイベント ハンドラーを登録します。
using Microsoft.Maui.LifecycleEvents; ... public static MauiApp CreateMauiApp() { var builder = MauiApp.CreateBuilder(); builder .UseMauiApp<App>() .ConfigureLifecycleEvents(events => { #if WINDOWS events.AddWindows(windows => windows .OnWindowCreated(window => { window.SizeChanged += OnSizeChanged; })); #endif }); return builder.Build(); }
プラットフォーム ライフサイクル イベントのイベント ハンドラーで、
ILifecycleEventService
インスタンスを取得し、そのInvokeEvents
メソッドを呼び出し、プラットフォーム イベント名を引数として指定します。using Microsoft.Maui.LifecycleEvents; ... #if WINDOWS static void OnSizeChanged(object sender, Microsoft.UI.Xaml.WindowSizeChangedEventArgs args) { ILifecycleEventService service = MauiWinUIApplication.Current.Services.GetRequiredService<ILifecycleEventService>(); service.InvokeEvents(nameof(Microsoft.UI.Xaml.Window.SizeChanged)); } #endif
Windows では
MauiWinUIApplication
型を使用して、そのCurrent
プロパティからネイティブ アプリ インスタンスにアクセスできます。 Android ではMauiApplication
型を使用して、ネイティブ アプリ インスタンスにアクセスできます。 同様に、iOS ではMauiUIApplicationDelegate
型を使用して、ネイティブ アプリ インスタンスにアクセスできます。警告
InvokeEvents
メソッドを使用して未登録のイベントを呼び出しても、例外はスローされません。MauiProgram
クラスのCreateMauiApp
メソッドで、MauiAppBuilder
オブジェクトのConfigureLifecycleEvents
メソッドを呼び出します。 次に、ILifecycleBuilder
オブジェクトでAddEvent
メソッドを呼び出し、プラットフォーム イベントの名前と、プラットフォーム イベントが発生したときに呼び出されるAction
を指定します。using Microsoft.Maui.LifecycleEvents; namespace PlatformLifecycleDemo { public static class MauiProgram { public static MauiApp CreateMauiApp() { var builder = MauiApp.CreateBuilder(); builder .UseMauiApp<App>() .ConfigureLifecycleEvents(events => { #if WINDOWS events.AddWindows(windows => windows .OnWindowCreated(window => { window.SizeChanged += OnSizeChanged; })); events.AddEvent(nameof(Microsoft.UI.Xaml.Window.SizeChanged), () => LogEvent("Window SizeChanged")); #endif static bool LogEvent(string eventName, string type = null) { System.Diagnostics.Debug.WriteLine($"Lifecycle event: {eventName}{(type == null ? string.Empty : $" ({type})")}"); return true; } }); return builder.Build(); } } }
全体的な効果としては、ユーザーが Windows でアプリ ウィンドウのサイズを変更すると、AddEvent
メソッドで指定されたアクションが実行されます。
Note
AddEvent
メソッドには、デリゲートを指定できるようにするオーバーロードもあります。
.NET MAUI