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:
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łaniuCreated
zdarzenia.OnActivated
, który jest wywoływany po wywołaniuActivated
zdarzenia.OnDeactivated
, który jest wywoływany po wywołaniuDeactivated
zdarzenia.OnStopped
, który jest wywoływany po wywołaniuStopped
zdarzenia.OnResumed
, który jest wywoływany po wywołaniuResumed
zdarzenia.OnDestroying
, który jest wywoływany po wywołaniuDestroying
zdarzenia.OnBackgrounding
, który jest wywoływany po wywołaniuBackgrounding
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ę Window
pochodną 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.Result Android.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 , OnRestart lub 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.NSUserActivity UIKit.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.UIApplicationShortcutItem UIKit.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 , , string Foundation.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.UISceneSession UIKit.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.UIInterfaceOrientation UIKit.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 jegoInvokeEvents
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 jegoInvokeEvents
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 jegoCurrent
właściwości. TypMauiApplication
w systemie Android może służyć do uzyskiwania dostępu do wystąpienia aplikacji natywnej. Podobnie typMauiUIApplicationDelegate
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łajILifecycleBuilder
metodęAddEvent
i określ nazwę zdarzenia platformy orazAction
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.