Udostępnij za pośrednictwem


Cykl życia aplikacji

Aplikacje interfejsu użytkownika aplikacji wieloplatformowych platformy .NET (.NET MAUI) zwykle mają cztery stany wykonywania: nie są uruchomione, uruchomione, dezaktywowane i zatrzymane. Program .NET MAUI zgłasza zdarzenia cyklu życia międzyplatformowe w Window klasie, gdy aplikacja przechodzi ze stanu nieuruchomionego do stanu uruchomienia, stanu uruchomienia do stanu dezaktywowanego, stanu dezaktywowanego do stanu zatrzymanego, stanu zatrzymanego do stanu uruchomionego i stanu zatrzymania do stanu nieuruchomionego.

Na poniższym diagramie przedstawiono przegląd cyklu życia aplikacji .NET MAUI:

Cykl życia aplikacji .NET MAUI

Na diagramie szary owalny wskazuje, że aplikacja nie jest załadowana do pamięci. Jasnoniebieskie owalny wskazują, że aplikacja jest w pamięci. Tekst na łukach wskazuje zdarzenia wywoływane przez program .NET MAUI, które dostarczają powiadomienia do uruchomionej aplikacji.

Stan wykonywania aplikacji zależy od historii aplikacji. Na przykład po pierwszym zainstalowaniu aplikacji lub uruchomieniu urządzenia można uznać, że aplikacja nie jest uruchomiona. Po uruchomieniu aplikacji są wywoływane Created zdarzenia i Activated , a aplikacja jest uruchomiona. Jeśli inne okno aplikacji zyska fokus, Deactivated zdarzenie zostanie zgłoszone i aplikacja zostanie zdezaktywowana. Jeśli użytkownik przełączy się do innej aplikacji lub powróci do ekranu głównego urządzenia, aby okno aplikacji nie było już widoczne, Deactivated zdarzenia i Stopped zostaną zgłoszone i aplikacja zostanie zatrzymana. Jeśli użytkownik wróci do aplikacji, Resuming zostanie zgłoszone zdarzenie, a aplikacja zostanie uruchomiona. Alternatywnie aplikacja może zostać zakończona przez użytkownika podczas jej działania. W takiej sytuacji aplikacja zostanie zdezaktywowana , a następnie zatrzymana, Destroying zostanie zgłoszone zdarzenie, a aplikacja nie jest uruchomiona. Podobnie urządzenie może zakończyć działanie aplikacji, gdy jest zatrzymana, ze względu na ograniczenia zasobów, a zdarzenie jest zgłaszane, a Destroying aplikacja nie jest uruchomiona.

Ponadto program .NET MAUI umożliwia powiadamianie aplikacji o wystąpieniu zdarzeń cyklu życia platformy. Aby uzyskać więcej informacji, zobacz Zdarzenia cyklu życia platformy.

Zdarzenia cyklu życia międzyplatformowe

Klasa Window definiuje następujące zdarzenia cyklu życia międzyplatformowe:

Wydarzenie opis Czynność do wykonania
Created To zdarzenie jest zgłaszane po utworzeniu okna natywnego. W tym momencie okno międzyplatformowe będzie miało natywną procedurę obsługi okien, ale okno może nie być jeszcze widoczne.
Activated To zdarzenie jest zgłaszane, gdy okno zostało aktywowane i jest lub stanie się oknem ukierunkowanym.
Deactivated To zdarzenie jest zgłaszane, gdy okno nie jest już oknem ukierunkowanym. Jednak okno może być nadal widoczne.
Stopped To zdarzenie jest zgłaszane, gdy okno nie jest już widoczne. Nie ma gwarancji, że aplikacja zostanie wznowiona z tego stanu, ponieważ może zostać zakończona przez system operacyjny. Odłącz się od wszelkich długotrwałych procesów lub anuluj wszelkie oczekujące żądania, które mogą zużywać zasoby urządzenia.
Resumed To zdarzenie jest zgłaszane, gdy aplikacja zostanie wznowiona po zatrzymaniu. To zdarzenie nie zostanie podniesione po raz pierwszy podczas uruchamiania aplikacji i może zostać zgłoszone tylko wtedy, gdy Stopped zdarzenie zostało wcześniej zgłoszone. Zasubskrybuj wszystkie wymagane zdarzenia i odśwież dowolną zawartość, która znajduje się na widocznej stronie.
Destroying To zdarzenie jest zgłaszane, gdy okno natywne jest niszczone i cofnięto przydział. To samo okno międzyplatformowe może być używane w nowym oknie natywnym po ponownym otwarciu aplikacji. Usuń wszystkie subskrypcje zdarzeń dołączone do okna natywnego.

Te zdarzenia międzyplatformowe są mapowanie na różne zdarzenia platformy, a w poniższej tabeli przedstawiono to mapowanie:

Zdarzenie Android iOS Windows
Created OnPostCreate FinishedLaunching Created
Activated OnResume OnActivated Activated (CodeActivated i PointerActivated)
Deactivated OnPause OnResignActivation Activated (Deactivated)
Stopped OnStop DidEnterBackground VisibilityChanged
Resumed OnRestart WillEnterForeground Resumed
Destroying OnDestroy WillTerminate Closed

Ponadto Window klasa definiuje Backgrounding również zdarzenie wywoływane w systemach iOS i Mac Catalyst, gdy okno jest zamknięte lub wchodzi w stan tła. Obiekt BackgroundingEventArgs towarzyszy temu zdarzeniu i każdy string stan powinien być utrwalone we State właściwości BackgroundingEventArgs obiektu, który system operacyjny zachowa do czasu wznowienia okna. Po wznowieniu okna stan jest udostępniany przez IActivationState argument przesłonięcia CreateWindow .

Oprócz tych zdarzeń Window klasa ma również następujące metody cyklu życia, które można zastąpić:

  • OnCreated, który jest wywoływany po wywołaniu Created zdarzenia.
  • OnActivated, który jest wywoływany po wywołaniu Activated zdarzenia.
  • OnDeactivated, który jest wywoływany po wywołaniu Deactivated zdarzenia.
  • OnStopped, który jest wywoływany po wywołaniu Stopped zdarzenia.
  • OnResumed, który jest wywoływany po wywołaniu Resumed zdarzenia.
  • OnDestroying, który jest wywoływany po wywołaniu Destroying zdarzenia.
  • OnBackgrounding, który jest wywoływany po wywołaniu Backgrounding zdarzenia.

Aby zasubskrybować Window zdarzenia cyklu życia, zastąpij CreateWindow metodę Window w App klasie, aby utworzyć wystąpienie, na którym można subskrybować zdarzenia:

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;
        }
    }
}

Alternatywnie, aby użyć przesłonięć cyklu życia, utwórz klasę pochodzącą Window z klasy

namespace MyMauiApp
{
    public class MyWindow : Window
    {
        public MyWindow() : base()
        {
        }

        public MyWindow(Page page) : base(page)
        {
        }

        protected override void OnCreated()
        {
            // Register services
        }
    }
}

Klasę Windowpochodną można następnie użyć przez zastąpienie CreateWindow metody w klasie w App celu zwrócenia MyWindow wystąpienia.

Ostrzeżenie

Obiekt InvalidOperationException zostanie zgłoszony, jeśli App.MainPage właściwość jest ustawiona, a CreateWindow metoda tworzy Window obiekt przy użyciu przesłonięcia Page , które akceptuje argument.

Zdarzenia cyklu życia platformy

Program .NET MAUI definiuje delegatów wywoływanych w odpowiedzi na zgłaszane zdarzenia cyklu życia platformy. Procedury obsługi można określić dla tych delegatów przy użyciu nazwanych metod lub funkcji anonimowych, które są wykonywane po wywołaniu delegata. Ten mechanizm umożliwia powiadamianie aplikacji o wywoływaniu typowych zdarzeń cyklu życia platformy.

Ważne

Metoda ConfigureLifecycleEvents znajduje się w Microsoft.Maui.LifecycleEvents przestrzeni nazw.

Android

W poniższej tabeli wymieniono delegatów MAUI platformy .NET, które są wywoływane w odpowiedzi na zgłaszane zdarzenia cyklu życia systemu Android:

Delegat Argumenty opis Komentarze
OnActivityResult Android.App.Activity, , int, , Android.App.ResultAndroid.Content.Intent? Wywoływane po uruchomieniu działania kończy działanie.
OnApplicationConfigurationChanged Android.App.Application, Android.Content.Res.Configuration Wywoływane po zmianie konfiguracji urządzenia podczas działania składnika.
OnApplicationCreate Android.App.Application Wywoływane po uruchomieniu aplikacji przed utworzeniem obiektów działania, usługi lub odbiorcy (z wyłączeniem dostawców zawartości).
OnApplicationCreating Android.App.Application Wywoływane po uruchomieniu aplikacji przed utworzeniem obiektów działania, usługi lub odbiorcy (z wyłączeniem dostawców zawartości).
OnApplicationLowMemory Android.App.Application Wywoływane, gdy system jest mało pamięci, a aktywne uruchamianie procesów powinno przyciąć użycie pamięci.
OnApplicationTrimMemory Android.App.Application, Android.Content.TrimMemory Wywoływane, gdy system operacyjny ustalił, że jest to dobry czas na proces przycinania niepotrzebnej pamięci z jego procesu.
OnBackPressed Android.App.Activity Wywoływane, gdy działanie wykryło naciśnięcie wstecz.
OnConfigurationChanged Android.App.Activity, Android.Content.Res.Configuration Wywoływane po zmianie konfiguracji urządzenia podczas działania.
OnCreate Android.App.Activity, Android.OS.Bundle? Wywoływane podczas tworzenia działania.
OnDestroy Android.App.Activity Wywoływane po zakończeniu działania lub z powodu tymczasowego zniszczenia wystąpienia działania w celu zaoszczędzenia miejsca. Zawsze należy wywołać implementację superklasy.
OnNewIntent Android.App.Activity, Android.Content.Intent? Wywoływane po ponownym uruchomieniu działania w górnej części stosu działań zamiast nowego wystąpienia uruchomionego działania.
OnPause Android.App.Activity Wywoływane, gdy działanie przechodzi w tle, ale jeszcze nie zostało zabite. Zawsze należy wywołać implementację superklasy.
OnPostCreate Android.App.Activity, Android.OS.Bundle? Wywoływane po zakończeniu uruchamiania działania po OnStart wywołaniu i OnRestoreInstanceState wywołaniu. Zawsze należy wywołać implementację superklasy. Jest to zdarzenie tylko dla systemu, które zwykle nie powinno być używane przez aplikacje.
OnPostResume Android.App.Activity Wywoływane po zakończeniu wznawiania działania po OnResume wywołaniu. Zawsze należy wywołać implementację superklasy. Jest to zdarzenie tylko dla systemu, które zwykle nie powinno być używane przez aplikacje.
OnRequestPermissionsResult Android.App.Activity, , int, , string[]Android.Content.PM.Permission[] Wywołana jako wywołanie zwrotne dla wyniku żądania uprawnień.
OnRestart Android.App.Activity Wywoływane po OnStop ponownym uruchomieniu bieżącego działania do użytkownika (użytkownik przeszedł z powrotem do niego). Zawsze należy wywołać implementację superklasy.
OnRestoreInstanceState Android.App.Activity, Android.OS.Bundle Wywoływane po OnStart ponownym zainicjowaniu działania z wcześniej zapisanego stanu.
OnResume Android.App.Activity Wywoływane po OnRestoreInstanceState, OnRestartlub OnPause, aby wskazać, że działanie jest aktywne i jest gotowe do odbierania danych wejściowych.
OnSaveInstanceState Android.App.Activity, Android.OS.Bundle Wywoływane w celu pobrania stanu poszczególnych wystąpień z zabijanego działania, aby można było przywrócić stan w OnCreate systemie lub OnRestoreInstanceState.
OnStart Android.App.Activity Wywoływane po OnCreate zatrzymaniu działania lub OnRestart po jego zatrzymaniu jest teraz wyświetlane użytkownikowi. Zawsze należy wywołać implementację superklasy.
OnStop Android.App.Activity Wywoływane, gdy działanie nie jest już widoczne dla użytkownika. Zawsze należy wywołać implementację superklasy.

Ważne

Każdy delegat ma odpowiadającą identycznie nazwaną metodę rozszerzenia, którą można wywołać, aby zarejestrować procedurę obsługi dla delegata.

Aby odpowiedzieć na wywoływany delegat cyklu życia systemu Android, wywołaj ConfigureLifecycleEvents metodę w MauiAppBuilder obiekcie w CreateMauiapp metodzie MauiProgram klasy. Następnie w obiekcie wywołaj ILifecycleBuilder metodę AddAndroid i określ Action , która rejestruje programy obsługi dla wymaganych delegatów:

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();
        }
    }
}

Aby uzyskać więcej informacji na temat cyklu życia aplikacji systemu Android, zobacz Understand the Activity Lifecycle on developer.android.com (Omówienie cyklu życia działania w developer.android.com).

Katalizator systemów iOS i Mac

W poniższej tabeli wymieniono delegatów MAUI platformy .NET, które są wywoływane w odpowiedzi na zgłaszane zdarzenia cyklu życia programu iOS i Mac Catalyst:

Delegat Argumenty opis
ApplicationSignificantTimeChange UIKit.UIApplication Wywoływane, gdy wystąpi znaczna zmiana czasu, taka jak północ, czas zmiany operatora lub początek lub zatrzymanie światła dziennego.
ContinueUserActivity UIKit.UIApplication, , Foundation.NSUserActivityUIKit.UIApplicationRestorationHandler Wywoływane, gdy aplikacja odbiera dane skojarzone z działaniem użytkownika, takie jak przesyłanie działania z innego urządzenia przy użyciu funkcji Handoff.
DidEnterBackground UIKit.UIApplication Wywoływane po wprowadzeniu aplikacji w tle.
FinishedLaunching UIKit.UIApplication, Foundation.NSDictionary Wywoływane po uruchomieniu aplikacji.
OnActivated UIKit.UIApplication Wywoływane po uruchomieniu aplikacji i za każdym razem, gdy aplikacja powróci na pierwszy plan.
OnResignActivation UIKit.UIApplication Wywoływana, gdy aplikacja ma wejść w tle, zostać zawieszona lub gdy użytkownik otrzyma przerwę, taką jak rozmowa telefoniczna lub tekst.
OpenUrl UIKit.UIApplication, Foundation.NSDictionary Wywoływane, gdy aplikacja powinna otworzyć określony adres URL.
PerformActionForShortcutItem UIKit.UIApplication, , UIKit.UIApplicationShortcutItemUIKit.UIOperationHandler Wywoływane po zainicjowaniu szybkiej akcji ekranu głównego.
PerformFetch UIKit.UIApplication, Action<UIBackgroundFetchResult> Wywołano funkcję , aby poinformować aplikację, że może rozpocząć operację pobierania, jeśli ma dane do pobrania.
SceneContinueUserActivity UIKit.UIScene, Foundation.NSUserActivity Wywoływane w celu obsługi określonego działania związanego z przekazywaniem.
SceneDidDisconnect UIKit.UIScene Wywoływane po usunięciu sceny z aplikacji.
SceneDidEnterBackground UIKit.UIScene Wywoływane, gdy scena jest uruchomiona w tle i nie jest na ekranie.
SceneDidFailToContinueUserActivity UIKit.UIScene, , stringFoundation.NSError Wywołana w celu poinformowania użytkownika o tym, że nie można ukończyć działania.
SceneDidUpdateUserActivity UIKit.UIScene, Foundation.NSUserActivity Wywoływane po zaktualizowaniu określonego działania.
SceneOnActivated UIKit.UIScene Wywoływane, gdy scena staje się aktywna i może reagować na zdarzenia użytkownika.
SceneOnResignActivation UIKit.UIScene Wywoływane, gdy scena ma zrezygnować z aktywnego stanu i przestać odpowiadać na zdarzenia użytkownika.
SceneOpenUrl UIKit.UIScene, Foundation.NSSet<UIKit.UIOpenUrlContext> Wywoływane, gdy scena prosi o otwarcie co najmniej jednego adresu URL.
SceneRestoreInteractionState UIKit.UIScene, Foundation.NSUserActivity Wywołana w celu przywrócenia stanu działania.
SceneWillConnect UIKit.UIScene, , UIKit.UISceneSessionUIKit.UISceneConnectionOptions Wywoływane po dodaniu sceny do aplikacji.
SceneWillContinueUserActivity UIKit.UIScene, string Wywoływane w celu przygotowania do odbierania danych związanych z przekazywaniem.
SceneWillEnterForeground UIKit.UIScene Wywoływane, gdy scena ma zostać uruchomiona na pierwszym planie i stanie się widoczna dla użytkownika.
WillEnterForeground UIKit.UIApplication Wywoływane, jeśli aplikacja będzie zwracana ze stanu w tle.
WillFinishLaunching UIKit.UIApplication, Foundation.NSDictionary Wywoływane po rozpoczęciu uruchamiania aplikacji, ale przywracanie stanu jeszcze nie miało miejsca.
WillTerminate UIKit.UIApplication Wywoływane, jeśli aplikacja jest przerywana z powodu ograniczeń pamięci lub bezpośrednio przez użytkownika.
WindowSceneDidUpdateCoordinateSpace UIKit.UIWindowScene, , UIKit.IUICoordinateSpace, , UIKit.UIInterfaceOrientationUIKit.UITraitCollection Wywoływane w przypadku zmiany rozmiaru, orientacji lub cech sceny.

Ważne

Każdy delegat, z wyjątkiem PerformFetch, ma odpowiadającą identycznie nazwaną metodę rozszerzenia, którą można wywołać, aby zarejestrować procedurę obsługi dla delegata.

Aby odpowiedzieć na wywoływany delegat cyklu życia programu iOS i Mac Catalyst, wywołaj metodę ConfigureLifecycleEvents w MauiAppBuilder obiekcie w CreateMauiapp metodzie MauiProgram klasy . Następnie w obiekcie wywołaj ILifecycleBuilder metodę AddiOS i określ Action , która rejestruje programy obsługi dla wymaganych delegatów:

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();
        }
    }
}

Aby uzyskać więcej informacji na temat cyklu życia aplikacji systemu iOS, zobacz Zarządzanie cyklem życia aplikacji w developer.apple.com.

Windows

W poniższej tabeli wymieniono delegatów MAUI platformy .NET, które są wywoływane w odpowiedzi na zgłaszane zdarzenia cyklu życia systemu Windows:

Delegat Argumenty opis
OnActivated Microsoft.UI.Xaml.Window, Microsoft.UI.Xaml.WindowActivatedEventArgs Wywoływane po wystąpieniu zdarzenia platformy Activated , jeśli aplikacja nie jest wznawiana.
OnClosed Microsoft.UI.Xaml.Window, Microsoft.UI.Xaml.WindowEventArgs Wywoływane po wywołaniu zdarzenia platformy Closed .
OnLaunched Microsoft.UI.Xaml.Window, Microsoft.UI.Xaml.LaunchActivatedEventArgs Po utworzeniu i aktywowaniu okna natywnego wywołana przez program .NET MAUI Application.OnLaunched przesłonięć.
OnLaunching Microsoft.UI.Xaml.Window, Microsoft.UI.Xaml.LaunchActivatedEventArgs Wywołana przez zastąpienie programu .NET MAUI Application.OnLaunched przed utworzeniem i aktywowanym oknem natywnym.
OnPlatformMessage Microsoft.UI.Xaml.Window, WindowsPlatformMessageEventArgs Wywoływane, gdy program .NET MAUI odbiera określone natywne komunikaty systemu Windows.
OnPlatformWindowSubclassed Microsoft.UI.Xaml.Window, WindowsPlatformWindowSubclassedEventArgs Wywoływane przez program .NET MAUI, gdy okno Win32 jest podklasowane.
OnResumed Microsoft.UI.Xaml.Window Wywoływane po wystąpieniu zdarzenia platformy Activated , jeśli aplikacja jest wznawiana.
OnVisibilityChanged Microsoft.UI.Xaml.Window, Microsoft.UI.Xaml.WindowVisibilityChangedEventArgs Wywoływane po wywołaniu zdarzenia platformy VisibilityChanged .
OnWindowCreated Microsoft.UI.Xaml.Window Wywoływane po utworzeniu okna natywnego dla międzyplatformowego Window.

Program .NET MAUI uwidacznia określone natywne komunikaty systemu Windows jako zdarzenie cyklu życia z pełnomocnikiem OnPlatformMessage . Obiekt WindowsPlatformMessageEventArgs , który towarzyszy temu delegatowi, zawiera MessageId właściwość typu uint. Wartość tej właściwości można zbadać, aby określić, który komunikat został przekazany do okna aplikacji. Aby uzyskać więcej informacji na temat komunikatów systemu Windows, zobacz Komunikaty systemu Windows (Wprowadzenie do win32 i C++). Aby uzyskać listę stałych komunikatów okna, zobacz Powiadomienia okna.

Ważne

Każdy delegat ma odpowiadającą identycznie nazwaną metodę rozszerzenia, którą można wywołać, aby zarejestrować procedurę obsługi dla delegata.

Aby odpowiedzieć na wywoływany delegat cyklu życia systemu Windows, wywołaj ConfigureLifecycleEvents metodę w MauiAppBuilder obiekcie w CreateMauiApp metodzie MauiProgram klasy. Następnie w obiekcie wywołaj ILifecycleBuilder metodę AddWindows i określ Action , która rejestruje programy obsługi dla wymaganych delegatów:

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();
        }
    }
}

Pobieranie obiektu Window

Kod platformy może pobrać obiekt aplikacji Window ze zdarzeń cyklu życia platformy przy użyciu GetWindow metody rozszerzenia:

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();
        }
    }
}

Niestandardowe zdarzenia cyklu życia

Podczas gdy program .NET MAUI definiuje delegatów wywoływanych w odpowiedzi na zgłaszane zdarzenia cyklu życia platformy, uwidacznia tylko wspólny zestaw zdarzeń cyklu życia platformy. Zawiera on jednak również mechanizm, zazwyczaj dla autorów bibliotek, który umożliwia powiadamianie aplikacji po wywołaniu dodatkowych zdarzeń cyklu życia platformy. Proces realizacji tego procesu jest następujący:

  • Zarejestruj procedurę obsługi zdarzeń dla zdarzenia cyklu życia platformy, które nie jest uwidocznione przez program .NET MAUI.
  • W procedurze obsługi zdarzeń dla zdarzenia cyklu życia platformy pobierz ILifecycleEventService wystąpienie i wywołaj jego InvokeEvents metodę, określając nazwę zdarzenia platformy jako argument.

Następnie aplikacje, które chcą otrzymywać powiadomienia o zdarzeniu cyklu życia platformy, powinny zmodyfikować CreateMauiApp metodę klasy MauiProgram w celu wywołania ConfigureLifecycleEvents metody w MauiAppBuilder obiekcie. Następnie w obiekcie wywołaj ILifecycleBuilder metodę AddEvent i określ nazwę zdarzenia platformy oraz Action nazwę, która zostanie wywołana po wywołaniu zdarzenia platformy.

Przykład

Zdarzenie WinUI 3 Window.SizeChanged występuje, gdy okno aplikacji natywnej zostało po raz pierwszy renderowane lub zmieniło jego rozmiar renderowania. Program .NET MAUI nie uwidacznia tego zdarzenia platformy jako zdarzenia cyklu życia. Jednak aplikacje mogą otrzymywać powiadomienia, gdy to zdarzenie platformy jest zgłaszane, korzystając z następującego podejścia:

  • Zarejestruj procedurę obsługi zdarzeń dla Window.SizeChanged zdarzenia cyklu życia platformy:

    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();
    }    
    
  • W procedurze obsługi zdarzeń dla zdarzenia cyklu życia platformy pobierz ILifecycleEventService wystąpienie i wywołaj jego InvokeEvents metodę, określając nazwę zdarzenia platformy jako argument:

    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
    

    Typ MauiWinUIApplication w systemie Windows może służyć do uzyskiwania dostępu do wystąpienia aplikacji natywnej za pośrednictwem jego Current właściwości. Typ MauiApplication w systemie Android może służyć do uzyskiwania dostępu do wystąpienia aplikacji natywnej. Podobnie typ MauiUIApplicationDelegate w systemie iOS może służyć do uzyskiwania dostępu do wystąpienia aplikacji natywnej.

    Ostrzeżenie

    Wywołanie niezarejestrowanego zdarzenia przy InvokeEvents użyciu metody nie zgłasza wyjątku.

  • W metodzie CreateMauiApp MauiProgram klasy wywołaj metodę ConfigureLifecycleEvents MauiAppBuilder w obiekcie . Następnie w obiekcie wywołaj ILifecycleBuilder metodę AddEvent i określ nazwę zdarzenia platformy oraz Action nazwę zdarzenia platformy, która zostanie wywołana po wywołaniu zdarzenia platformy:

    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();
            }
        }
    }
    

Ogólny efekt polega na tym, że gdy użytkownik zmieni rozmiar okna aplikacji w systemie Windows, wykonywana jest akcja określona AddEvent w metodzie.

Uwaga

Metoda AddEvent ma również przeciążenie, które umożliwia określenie delegata.