Жизненный цикл приложения
Приложения многоплатформенного пользовательского интерфейса приложений .NET (.NET MAUI) обычно имеют четыре состояния выполнения: не запущено, не запущено, деактивировано и остановлено. .NET MAUI вызывает события жизненного цикла кроссплатформенного цикла класса Window
, когда приложение переходит из не запущенного состояния в состояние выполнения, состояние выполнения в деактивированное состояние, деактивированное состояние в остановленное состояние, остановленное состояние в состояние выполнения и остановленное состояние в не запущенное состояние.
На следующей схеме показан обзор жизненного цикла приложения .NET MAUI:
На схеме серый овал указывает, что приложение не загружается в память. Светло-голубые овалы указывают на то, что приложение находится в памяти. Текст на дугах указывает события, создаваемые .NET MAUI, которые предоставляют уведомления в работающем приложении.
Состояние выполнения приложения зависит от журнала приложения. Например, когда приложение установлено в первый раз или устройство запускается, приложение может считаться не запущенным. При запуске Created
приложения создаются события и Activated
запускается приложение. Если другое окно приложения получает фокус, Deactivated
событие вызывается и приложение деактивируется. Если пользователь переключается на другое приложение или возвращается на начальный экран устройства, чтобы окно приложения больше не отображалось, Deactivated
возникают события и Stopped
приложение останавливается. Если пользователь возвращается в приложение, Resuming
вызывается событие и выполняется приложение. Кроме того, приложение может быть завершено пользователем во время его работы. В этой ситуации приложение деактивируется, а затем останавливается, Destroying
вызывается событие, и приложение не выполняется. Аналогичным образом, устройство может завершить приложение во время его остановки из-за ограничений ресурсов, и событие возникает, и Destroying
приложение не выполняется.
Кроме того, .NET MAUI позволяет приложениям получать уведомления при возникновении событий жизненного цикла платформы. Дополнительные сведения см. в разделе "События жизненного цикла платформы".
События жизненного цикла кроссплатформенного цикла
Класс Window
определяет следующие межплатформенные события жизненного цикла:
Мероприятие | Description | Предстоящее действие |
---|---|---|
Created |
Это событие возникает после создания собственного окна. На этом этапе кроссплатформенное окно будет иметь собственный обработчик окон, но окно пока не отображается. | |
Activated |
Это событие возникает, когда окно активировано, а также будет или станет фокусируемым окном. | |
Deactivated |
Это событие возникает, когда окно больше не является фокусируемым окном. Однако окно по-прежнему может быть видимым. | |
Stopped |
Это событие возникает, когда окно больше не отображается. Не гарантируется, что приложение возобновляется из этого состояния, так как оно может быть завершено операционной системой. | Отключитесь от любых длительных процессов или отмените ожидающие запросы, которые могут использовать ресурсы устройства. |
Resumed |
Это событие возникает, когда приложение возобновляется после остановки. Это событие не будет создано при первом запуске приложения и может вызываться только в том случае, если Stopped событие было создано ранее. |
Подпишитесь на все необходимые события и обновите любое содержимое, которое находится на видимой странице. |
Destroying |
Это событие возникает при уничтожении и освобождении собственного окна. Одно и то же кроссплатформенное окно может использоваться для нового собственного окна при повторном открытии приложения. | Удалите все подписки на события, подключенные к собственному окну. |
Эти кроссплатформенные события сопоставляют с различными событиями платформы, а в следующей таблице показано следующее сопоставление:
Мероприятие | Android | iOS | Windows |
---|---|---|---|
Created |
OnPostCreate |
FinishedLaunching |
Created |
Activated |
OnResume |
OnActivated |
Activated (CodeActivated и PointerActivated ) |
Deactivated |
OnPause |
OnResignActivation |
Activated (Deactivated ) |
Stopped |
OnStop |
DidEnterBackground |
VisibilityChanged |
Resumed |
OnRestart |
WillEnterForeground |
Resumed |
Destroying |
OnDestroy |
WillTerminate |
Closed |
Кроме того, Window
класс также определяет Backgrounding
событие, которое вызывается в iOS и Mac Catalyst при закрытии окна или входит в фоновое состояние. BackgroundingEventArgs
Объект сопровождает это событие, и любое string
состояние должно быть сохранено в State
свойстве BackgroundingEventArgs
объекта, которое ОС сохранится до тех пор, пока не придется возобновить окно. Когда окно возобновляется IActivationState
, состояние предоставляется аргументом CreateWindow
переопределения.
Помимо этих событий, Window
класс также имеет следующие переопределимые методы жизненного цикла:
OnCreated
, который вызывается приCreated
вызове события.OnActivated
, который вызывается приActivated
вызове события.OnDeactivated
, который вызывается приDeactivated
вызове события.OnStopped
, который вызывается приStopped
вызове события.OnResumed
, который вызывается приResumed
вызове события.OnDestroying
, который вызывается приDestroying
вызове события.OnBackgrounding
, который вызывается приBackgrounding
вызове события.
Чтобы подписаться на Window
события жизненного цикла, переопределите CreateWindow
метод в App
классе, чтобы создать Window
экземпляр, на который можно подписаться на события:
namespace MyMauiApp
{
public partial class App : Application
{
public App()
{
InitializeComponent();
MainPage = new MainPage();
}
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
класс можно использовать путем переопределения CreateWindow
метода в App
классе для возврата экземпляра MyWindow
.
Предупреждение
InvalidOperationException
Вызывается, если App.MainPage
свойство задано, а CreateWindow
метод создает Window
объект с помощью переопределения, который принимает Page аргумент.
События жизненного цикла платформы
.NET MAUI определяет делегаты, вызываемые в ответ на события жизненного цикла платформы. Обработчики можно указать для этих делегатов, используя именованные методы или анонимные функции, которые выполняются при вызове делегата. Этот механизм позволяет приложениям получать уведомления при возникновении распространенных событий жизненного цикла платформы.
Внимание
Метод ConfigureLifecycleEvents
находится в Microsoft.Maui.LifecycleEvents
пространстве имен.
Android
В следующей таблице перечислены делегаты MAUI .NET, которые вызываются в ответ на события жизненного цикла Android.
Делегирование | Аргументы | Description | Комментарии |
---|---|---|---|
OnActivityResult |
Android.App.Activity , , int Android.App.Result Android.Content.Intent? |
Вызывается при выходе действия, которое вы запустили. | |
OnApplicationConfigurationChanged |
Android.App.Application , Android.Content.Res.Configuration |
Вызывается при изменении конфигурации устройства во время выполнения компонента. | |
OnApplicationCreate |
Android.App.Application |
Вызывается при запуске приложения перед созданием объектов действия, службы или приемника (за исключением поставщиков содержимого). | |
OnApplicationCreating |
Android.App.Application |
Вызывается при запуске приложения перед созданием объектов действия, службы или приемника (за исключением поставщиков содержимого). | |
OnApplicationLowMemory |
Android.App.Application |
Вызывается при низком уровне памяти системы и активно выполняющихся процессах следует обрезать использование памяти. | |
OnApplicationTrimMemory |
Android.App.Application , Android.Content.TrimMemory |
Вызывается, когда операционная система определила, что это хорошее время для процесса, чтобы обрезать ненужный объем памяти от своего процесса. | |
OnBackPressed |
Android.App.Activity |
Вызывается при обнаружении действия нажатия клавиши back. | |
OnConfigurationChanged |
Android.App.Activity , Android.Content.Res.Configuration |
Вызывается при изменении конфигурации устройства во время выполнения действия. | |
OnCreate |
Android.App.Activity , Android.OS.Bundle? |
Вызывается при создании действия. | |
OnDestroy |
Android.App.Activity |
Вызывается при завершении действия или из-за временного уничтожения экземпляра действия для экономии места. | Всегда вызывать реализацию суперкласса. |
OnNewIntent |
Android.App.Activity , Android.Content.Intent? |
Вызывается при повторном запуске действия в верхней части стека действий вместо нового экземпляра запущенного действия. | |
OnPause |
Android.App.Activity |
Вызывается при переходе действия в фон, но еще не был убит. | Всегда вызывать реализацию суперкласса. |
OnPostCreate |
Android.App.Activity , Android.OS.Bundle? |
Вызывается при завершении запуска действия после OnStart вызова.OnRestoreInstanceState |
Всегда вызывать реализацию суперкласса. Это событие только для системы, которое обычно не должно использоваться приложениями. |
OnPostResume |
Android.App.Activity |
Вызывается при завершении возобновления действия после OnResume вызова. |
Всегда вызывать реализацию суперкласса. Это событие только для системы, которое обычно не должно использоваться приложениями. |
OnRequestPermissionsResult |
Android.App.Activity , , int string[] Android.Content.PM.Permission[] |
Вызывается в качестве обратного вызова для результата запроса разрешений. | |
OnRestart |
Android.App.Activity |
Вызывается после OnStop повторного воспроизведения текущего действия пользователю (пользователь вернулся к нему). |
Всегда вызывать реализацию суперкласса. |
OnRestoreInstanceState |
Android.App.Activity , Android.OS.Bundle |
Вызывается после OnStart повторного инициализации действия из ранее сохраненного состояния. |
|
OnResume |
Android.App.Activity |
Вызывается после OnRestoreInstanceState илиOnRestart OnPause , чтобы указать, что действие активно и готово к получению входных данных. |
|
OnSaveInstanceState |
Android.App.Activity , Android.OS.Bundle |
Вызывается для получения состояния каждого экземпляра из убитого действия, чтобы состояние можно было восстановить в OnCreate или OnRestoreInstanceState . |
|
OnStart |
Android.App.Activity |
Вызывается после или OnRestart после OnCreate остановки действия, но теперь отображается пользователю. |
Всегда вызывать реализацию суперкласса. |
OnStop |
Android.App.Activity |
Вызывается, когда действие больше не отображается пользователю. | Всегда вызывать реализацию суперкласса. |
Внимание
Каждый делегат имеет соответствующий метод расширения с одинаковым именем, который можно вызвать для регистрации обработчика для делегата.
Чтобы ответить на вызываемый делегат жизненного цикла Android, вызовите ConfigureLifecycleEvents
метод MauiAppBuilder
объекта в методе CreateMauiapp
класса MauiProgram
. Затем вызовите 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
В следующей таблице перечислены делегаты .NET MAUI, которые вызываются в ответ на события жизненного цикла iOS и Mac Catalyst:
Делегирование | Аргументы | Description |
---|---|---|
ApplicationSignificantTimeChange |
UIKit.UIApplication |
Вызывается при значительном изменении времени, например полуночи, времени изменения оператора или начала или остановки дневной экономии. |
ContinueUserActivity |
UIKit.UIApplication , , Foundation.NSUserActivity UIKit.UIApplicationRestorationHandler |
Вызывается, когда приложение получает данные, связанные с действием пользователя, например передача действия с другого устройства с помощью handoff. |
DidEnterBackground |
UIKit.UIApplication |
Вызывается, когда приложение ввело фон. |
FinishedLaunching |
UIKit.UIApplication , Foundation.NSDictionary |
Вызывается при запуске приложения. |
OnActivated |
UIKit.UIApplication |
Вызывается при запуске приложения и каждый раз, когда приложение возвращается на передний план. |
OnResignActivation |
UIKit.UIApplication |
Вызывается, когда приложение будет входить в фон, приостановлено или когда пользователь получает прерывание, например телефонный звонок или текст. |
OpenUrl |
UIKit.UIApplication , Foundation.NSDictionary |
Вызывается, когда приложение должно открыть указанный URL-адрес. |
PerformActionForShortcutItem |
UIKit.UIApplication , , UIKit.UIApplicationShortcutItem UIKit.UIOperationHandler |
Вызывается при запуске быстрого действия начального экрана. |
PerformFetch |
UIKit.UIApplication , Action<UIBackgroundFetchResult> |
Вызывается, чтобы сообщить приложению, что оно может начать операцию получения, если она имеет данные для скачивания. |
SceneContinueUserActivity |
UIKit.UIScene , Foundation.NSUserActivity |
Вызывается для обработки указанного действия, связанного с рукой. |
SceneDidDisconnect |
UIKit.UIScene |
Вызывается при удалении сцены из приложения. |
SceneDidEnterBackground |
UIKit.UIScene |
Вызывается при запуске сцены в фоновом режиме и не находится на экране. |
SceneDidFailToContinueUserActivity |
UIKit.UIScene , , string Foundation.NSError |
Вызывается для информирования пользователя о том, что действие не удалось завершить. |
SceneDidUpdateUserActivity |
UIKit.UIScene , Foundation.NSUserActivity |
Вызывается при обновлении указанного действия. |
SceneOnActivated |
UIKit.UIScene |
Вызывается, когда сцена становится активной и может реагировать на события пользователя. |
SceneOnResignActivation |
UIKit.UIScene |
Вызывается, когда сцена собиралась уйти в активное состояние и перестать отвечать на события пользователя. |
SceneOpenUrl |
UIKit.UIScene , Foundation.NSSet<UIKit.UIOpenUrlContext> |
Вызывается, когда сцена запрашивает открыть один или несколько URL-адресов. |
SceneRestoreInteractionState |
UIKit.UIScene , Foundation.NSUserActivity |
Вызывается для восстановления состояния действия. |
SceneWillConnect |
UIKit.UIScene , , UIKit.UISceneSession UIKit.UISceneConnectionOptions |
Вызывается при добавлении сцены в приложение. |
SceneWillContinueUserActivity |
UIKit.UIScene , string |
Вызывается для подготовки к получению данных, связанных с передачой данных. |
SceneWillEnterForeground |
UIKit.UIScene |
Вызывается, когда сцена выполняется на переднем плане и становится видимой для пользователя. |
WillEnterForeground |
UIKit.UIApplication |
Вызывается, если приложение возвращается из фонового состояния. |
WillFinishLaunching |
UIKit.UIApplication , Foundation.NSDictionary |
Вызывается при запуске приложения, но восстановление состояния еще не произошло. |
WillTerminate |
UIKit.UIApplication |
Вызывается, если приложение завершается из-за ограничений памяти или непосредственно пользователем. |
WindowSceneDidUpdateCoordinateSpace |
UIKit.UIWindowScene , , UIKit.IUICoordinateSpace UIKit.UIInterfaceOrientation UIKit.UITraitCollection |
Вызывается при изменении размера, ориентации или признаков сцены. |
Внимание
Каждый делегат, за исключением PerformFetch
, имеет соответствующий метод расширения с одинаковым именем, который можно вызвать для регистрации обработчика для делегата.
Чтобы ответить на вызываемый делегат жизненного цикла iOS и Mac Catalyst, вызовите ConfigureLifecycleEvents
метод MauiAppBuilder
объекта в методе CreateMauiapp
класса MauiProgram
. Затем вызовите 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.
Windows
В следующей таблице перечислены делегаты .NET MAUI, которые вызываются в ответ на события жизненного цикла Windows.
Делегирование | Аргументы | Description |
---|---|---|
OnActivated |
Microsoft.UI.Xaml.Window , Microsoft.UI.Xaml.WindowActivatedEventArgs |
Вызывается при возникновении события платформы Activated , если приложение не возобновляется. |
OnClosed |
Microsoft.UI.Xaml.Window , Microsoft.UI.Xaml.WindowEventArgs |
Вызывается при возникновении события платформы Closed . |
OnLaunched |
Microsoft.UI.Xaml.Window , Microsoft.UI.Xaml.LaunchActivatedEventArgs |
Вызывается переопределением .NET MAUI Application.OnLaunched после создания и активации собственного окна. |
OnLaunching |
Microsoft.UI.Xaml.Window , Microsoft.UI.Xaml.LaunchActivatedEventArgs |
Вызывается переопределением .NET MAUI Application.OnLaunched перед созданием и активацией собственного окна. |
OnPlatformMessage |
Microsoft.UI.Xaml.Window , WindowsPlatformMessageEventArgs |
Вызывается, когда .NET MAUI получает определенные собственные сообщения Windows. |
OnPlatformWindowSubclassed |
Microsoft.UI.Xaml.Window , WindowsPlatformWindowSubclassedEventArgs |
Вызывается .NET MAUI при подклассе окна Win32. |
OnResumed |
Microsoft.UI.Xaml.Window |
Вызывается при возникновении события платформы Activated , если приложение возобновляется. |
OnVisibilityChanged |
Microsoft.UI.Xaml.Window , Microsoft.UI.Xaml.WindowVisibilityChangedEventArgs |
Вызывается при возникновении события платформы VisibilityChanged . |
OnWindowCreated |
Microsoft.UI.Xaml.Window |
Вызывается при создании собственного окна для кроссплатформенной платформы Window . |
.NET MAUI предоставляет определенные собственные сообщения Windows в качестве события жизненного цикла с делегатом OnPlatformMessage
. Объект WindowsPlatformMessageEventArgs
, сопровождающий этот делегат, включает MessageId
свойство типа uint
. Значение этого свойства можно проверить, чтобы определить, какое сообщение было передано в окно приложения. Дополнительные сведения о сообщениях Windows см. в статьях "Сообщения Windows" (начало работы с Win32 и C++). Список констант сообщений окна см. в разделе "Уведомления о окне".
Внимание
Каждый делегат имеет соответствующий метод расширения с одинаковым именем, который можно вызвать для регистрации обработчика для делегата.
Чтобы ответить на вызываемый делегат жизненного цикла Windows, вызовите ConfigureLifecycleEvents
метод MauiAppBuilder
объекта в методе CreateMauiApp
класса MauiProgram
. Затем вызовите 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
Код платформы может получить объект приложения Window
из событий жизненного цикла платформы с GetWindow
помощью метода расширения:
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
метод, указав имя события платформы в качестве аргумента.
Затем приложения, которые хотят получать уведомления о событии жизненного цикла платформы, должны изменить CreateMauiApp
метод своего MauiProgram
класса для вызова ConfigureLifecycleEvents
метода в объекте MauiAppBuilder
. Затем в 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
Тип
MauiWinUIApplication
в Windows можно использовать для доступа к собственному экземпляру приложения через егоCurrent
свойство. ТипMauiApplication
в Android можно использовать для доступа к экземпляру собственного приложения. Аналогичным образом,MauiUIApplicationDelegate
тип в iOS можно использовать для доступа к собственному экземпляру приложения.Предупреждение
Вызов незарегистрированного события с
InvokeEvents
методом не вызывает исключение.В методе
CreateMauiApp
класса вызовитеConfigureLifecycleEvents
методMauiProgram
объектаMauiAppBuilder
. Затем в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
.
Примечание.
Метод AddEvent
также имеет перегрузку, которая позволяет указать делегата.