Ciclo di vita dell'app
Le app .NET multipiattaforma dell'interfaccia utente dell'app (.NET MAUI) hanno in genere quattro stati di esecuzione: non in esecuzione, in esecuzione, disattivati e arrestati. .NET MAUI genera eventi del ciclo di vita multipiattaforma nella Window
classe quando un'app passa dallo stato non in esecuzione allo stato in esecuzione, lo stato di esecuzione allo stato disattivato, lo stato disattivato allo stato arrestato, lo stato arrestato allo stato in esecuzione e lo stato arrestato fino allo stato non in esecuzione.
Il diagramma seguente mostra una panoramica del ciclo di vita dell'app .NET MAUI:
Nel diagramma l'ovale grigio indica che l'app non viene caricata in memoria. Gli ovali blu chiaro indicano che l'app è in memoria. Il testo sugli archi indica gli eventi generati da .NET MAUI, che forniscono notifiche all'app in esecuzione.
Lo stato di esecuzione di un'app dipende dalla cronologia dell'app. Ad esempio, quando un'app viene installata per la prima volta o quando viene avviato un dispositivo, l'app può essere considerata non in esecuzione. Quando l'app viene avviata, Created
vengono generati gli eventi e Activated
e l'app è in esecuzione. Se una finestra dell'app diversa ottiene lo stato attivo, viene generato l'evento Deactivated
e l'app viene disattivata. Se l'utente passa a un'app diversa o torna alla schermata Iniziale del dispositivo, in modo che la finestra dell'app non sia più visibile, gli Deactivated
eventi e Stopped
vengono generati e l'app viene arrestata. Se l'utente torna all'app, viene generato l'evento Resuming
e l'app è in esecuzione. In alternativa, un'app potrebbe essere terminata da un utente durante l'esecuzione. In questo caso l'app viene disattivata e quindi arrestata, viene generato l'evento Destroying
e l'app non è in esecuzione. Analogamente, un dispositivo potrebbe terminare un'app mentre è arrestata, a causa di restrizioni delle risorse e l'evento Destroying
viene generato e l'app non è in esecuzione.
.NET MAUI consente inoltre alle app di ricevere notifiche quando vengono generati eventi del ciclo di vita della piattaforma. Per altre informazioni, vedere Eventi del ciclo di vita della piattaforma.
Eventi del ciclo di vita multipiattaforma
La Window
classe definisce gli eventi del ciclo di vita multipiattaforma seguenti:
Evento | Descrizione | Azione da eseguire |
---|---|---|
Created |
Questo evento viene generato dopo la creazione della finestra nativa. A questo punto la finestra multipiattaforma avrà un gestore della finestra nativa, ma la finestra potrebbe non essere ancora visibile. | |
Activated |
Questo evento viene generato quando la finestra è stata attivata e diventa, o diventerà, la finestra con lo stato attivo. | |
Deactivated |
Questo evento viene generato quando la finestra non è più attiva. Tuttavia, la finestra potrebbe essere ancora visibile. | |
Stopped |
Questo evento viene generato quando la finestra non è più visibile. Non esiste alcuna garanzia che un'app riprenderà da questo stato, perché potrebbe essere terminata dal sistema operativo. | Disconnettersi da qualsiasi processo a esecuzione prolungata o annullare eventuali richieste in sospeso che potrebbero utilizzare le risorse del dispositivo. |
Resumed |
Questo evento viene generato quando un'app riprende dopo l'arresto. Questo evento non verrà generato la prima volta che viene avviata l'app e può essere generato solo se l'evento Stopped è stato generato in precedenza. |
Sottoscrivere gli eventi necessari e aggiornare tutti i contenuti presenti nella pagina visibile. |
Destroying |
Questo evento viene generato quando la finestra nativa viene eliminata e deallocata. La stessa finestra multipiattaforma potrebbe essere usata in una nuova finestra nativa quando l'app viene riaperta. | Rimuovere tutte le sottoscrizioni di eventi associate alla finestra nativa. |
Questi eventi multipiattaforma sono mappati a diversi eventi della piattaforma e la tabella seguente illustra questo mapping:
Event | Android | iOS | Finestre |
---|---|---|---|
Created |
OnPostCreate |
FinishedLaunching |
Created |
Activated |
OnResume |
OnActivated |
Activated (CodeActivated e PointerActivated ) |
Deactivated |
OnPause |
OnResignActivation |
Activated (Deactivated ) |
Stopped |
OnStop |
DidEnterBackground |
VisibilityChanged |
Resumed |
OnRestart |
WillEnterForeground |
Resumed |
Destroying |
OnDestroy |
WillTerminate |
Closed |
Inoltre, la Window
classe definisce anche un Backgrounding
evento generato in iOS e Mac Catalyst quando la finestra viene chiusa o entra in uno stato di sfondo. Un BackgroundingEventArgs
oggetto accompagna questo evento e qualsiasi string
stato deve essere salvato in modo permanente nella State
proprietà dell'oggetto BackgroundingEventArgs
, che il sistema operativo manterrà fino a quando non sarà il momento di riprendere la finestra. Quando la finestra viene ripresa, lo stato viene fornito dall'argomento IActivationState
all'override CreateWindow
.
Oltre a questi eventi, la Window
classe include anche i metodi del ciclo di vita sostituibili seguenti:
OnCreated
, che viene richiamato quando viene generato l'eventoCreated
.OnActivated
, che viene richiamato quando viene generato l'eventoActivated
.OnDeactivated
, che viene richiamato quando viene generato l'eventoDeactivated
.OnStopped
, che viene richiamato quando viene generato l'eventoStopped
.OnResumed
, che viene richiamato quando viene generato l'eventoResumed
.OnDestroying
, che viene richiamato quando viene generato l'eventoDestroying
.OnBackgrounding
, che viene richiamato quando viene generato l'eventoBackgrounding
.
Per sottoscrivere gli eventi del ciclo di vita, eseguire l'override Window
del CreateWindow
metodo nella App
classe per creare un'istanza Window
in cui è possibile sottoscrivere gli eventi:
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;
}
}
}
In alternativa, per utilizzare gli override del ciclo di vita, creare una classe che deriva dalla Window
classe
namespace MyMauiApp
{
public class MyWindow : Window
{
public MyWindow() : base()
{
}
public MyWindow(Page page) : base(page)
{
}
protected override void OnCreated()
{
// Register services
}
}
}
La Window
classe derivata da può quindi essere utilizzata eseguendo l'override del CreateWindow
metodo nella App
classe per restituire un'istanza MyWindow
.
Avviso
Verrà generata un'eccezione InvalidOperationException
se la App.MainPage
proprietà è impostata e il CreateWindow
metodo crea un Window
oggetto utilizzando l'override che accetta un Page argomento.
Eventi del ciclo di vita della piattaforma
.NET MAUI definisce i delegati richiamati in risposta agli eventi del ciclo di vita della piattaforma generati. I gestori possono essere specificati per questi delegati, usando metodi denominati o funzioni anonime, che vengono eseguiti quando viene richiamato il delegato. Questo meccanismo consente alle app di ricevere notifiche quando vengono generati eventi comuni del ciclo di vita della piattaforma.
Importante
Il ConfigureLifecycleEvents
metodo si trova nello spazio dei Microsoft.Maui.LifecycleEvents
nomi .
Android
La tabella seguente elenca i delegati MAUI .NET richiamati in risposta agli eventi del ciclo di vita di Android generati:
Delegare | Argomenti | Descrizione | Commenti |
---|---|---|---|
OnActivityResult |
Android.App.Activity , int , Android.App.Result Android.Content.Intent? |
Richiamato quando un'attività avviata viene chiusa. | |
OnApplicationConfigurationChanged |
Android.App.Application , Android.Content.Res.Configuration |
Richiamato quando la configurazione del dispositivo cambia durante l'esecuzione del componente. | |
OnApplicationCreate |
Android.App.Application |
Richiamato all'avvio dell'app, prima che siano stati creati oggetti attività, servizio o ricevitore (esclusi i provider di contenuto). | |
OnApplicationCreating |
Android.App.Application |
Richiamato all'avvio dell'app, prima che siano stati creati oggetti attività, servizio o ricevitore (esclusi i provider di contenuti). | |
OnApplicationLowMemory |
Android.App.Application |
Richiamato quando il sistema è in esecuzione insufficiente nella memoria e l'esecuzione attiva dei processi deve ridurre l'utilizzo della memoria. | |
OnApplicationTrimMemory |
Android.App.Application , Android.Content.TrimMemory |
Richiamato quando il sistema operativo ha determinato che è un buon momento per un processo per ridurre la memoria non richiesta dal processo. | |
OnBackPressed |
Android.App.Activity |
Richiamato quando l'attività ha rilevato una pressione del tasto Indietro. | |
OnConfigurationChanged |
Android.App.Activity , Android.Content.Res.Configuration |
Richiamato quando la configurazione del dispositivo cambia durante l'esecuzione dell'attività. | |
OnCreate |
Android.App.Activity , Android.OS.Bundle? |
Generato quando viene creata l'attività. | |
OnDestroy |
Android.App.Activity |
Richiamato al termine dell'attività o perché il sistema sta eliminando temporaneamente l'istanza dell'attività per risparmiare spazio. | Chiamare sempre l'implementazione della classe super. |
OnNewIntent |
Android.App.Activity , Android.Content.Intent? |
Richiamato quando l'attività viene riavviata all'inizio dello stack di attività anziché una nuova istanza dell'attività avviata. | |
OnPause |
Android.App.Activity |
Richiamato quando un'attività entra in background, ma non è ancora stata uccisa. | Chiamare sempre l'implementazione della classe super. |
OnPostCreate |
Android.App.Activity , Android.OS.Bundle? |
Richiamato al termine dell'avvio dell'attività, dopo OnStart e OnRestoreInstanceState dopo che è stato chiamato . |
Chiamare sempre l'implementazione della classe super. Si tratta di un evento di sola sistema che in genere non deve essere usato dalle app. |
OnPostResume |
Android.App.Activity |
Richiamato al termine della ripresa dell'attività, dopo OnResume la chiamata. |
Chiamare sempre l'implementazione della classe super. Si tratta di un evento di sola sistema che in genere non deve essere usato dalle app. |
OnRequestPermissionsResult |
Android.App.Activity , int , string[] Android.Content.PM.Permission[] |
Richiamato come callback per il risultato dalla richiesta di autorizzazioni. | |
OnRestart |
Android.App.Activity |
Richiamato dopo OnStop la riesecuzione dell'attività corrente all'utente (l'utente ha eseguito di nuovo il passaggio). |
Chiamare sempre l'implementazione della classe super. |
OnRestoreInstanceState |
Android.App.Activity , Android.OS.Bundle |
Richiamato dopo OnStart la reinizializzazione dell'attività da uno stato salvato in precedenza. |
|
OnResume |
Android.App.Activity |
Richiamato dopo OnRestoreInstanceState , OnRestart o OnPause per indicare che l'attività è attiva ed è pronta per ricevere l'input. |
|
OnSaveInstanceState |
Android.App.Activity , Android.OS.Bundle |
Richiamato per recuperare lo stato per istanza da un'attività terminata in modo che lo stato possa essere ripristinato in OnCreate o OnRestoreInstanceState . |
|
OnStart |
Android.App.Activity |
Richiamato dopo OnCreate o OnRestart quando l'attività è stata arrestata, ma viene ora visualizzata all'utente. |
Chiamare sempre l'implementazione della classe super. |
OnStop |
Android.App.Activity |
Richiamato quando l'attività non è più visibile all'utente. | Chiamare sempre l'implementazione della classe super. |
Importante
Ogni delegato ha un metodo di estensione denominato identico, che può essere chiamato per registrare un gestore per il delegato.
Per rispondere a un delegato del ciclo di vita Android richiamato, chiamare il ConfigureLifecycleEvents
metodo sull'oggetto MauiAppBuilder
nel CreateMauiapp
metodo della MauiProgram
classe. Quindi, nell'oggetto ILifecycleBuilder
chiamare il AddAndroid
metodo e specificare che Action
registra i gestori per i delegati necessari:
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();
}
}
}
Per altre informazioni sul ciclo di vita dell'app Android, vedere Informazioni sul ciclo di vita delle attività in developer.android.com.
iOS e Mac Catalyst
La tabella seguente elenca i delegati MAUI .NET richiamati in risposta agli eventi del ciclo di vita di iOS e Mac Catalyst generati:
Delegare | Argomenti | Descrizione |
---|---|---|
ApplicationSignificantTimeChange |
UIKit.UIApplication |
Richiamato quando si verifica una modifica significativa dell'ora, ad esempio mezzanotte, ora modificata dal vettore o l'inizio o l'arresto dell'ora legale. |
ContinueUserActivity |
UIKit.UIApplication , Foundation.NSUserActivity , UIKit.UIApplicationRestorationHandler |
Richiamato quando l'app riceve i dati associati a un'attività utente, ad esempio il trasferimento di un'attività da un dispositivo diverso tramite Handoff. |
DidEnterBackground |
UIKit.UIApplication |
Richiamato quando l'app è entrata in background. |
FinishedLaunching |
UIKit.UIApplication , Foundation.NSDictionary |
Richiamato all'avvio dell'app. |
OnActivated |
UIKit.UIApplication |
Richiamato all'avvio dell'app e ogni volta che l'app torna in primo piano. |
OnResignActivation |
UIKit.UIApplication |
Richiamato quando l'app sta per entrare in background, essere sospesa o quando l'utente riceve un'interruzione, ad esempio una telefonata o un SMS. |
OpenUrl |
UIKit.UIApplication , Foundation.NSDictionary |
Richiamato quando l'app deve aprire un URL specificato. |
PerformActionForShortcutItem |
UIKit.UIApplication , UIKit.UIApplicationShortcutItem , UIKit.UIOperationHandler |
Richiamato quando viene avviata un'azione rapida della schermata Home. |
PerformFetch |
UIKit.UIApplication , Action<UIBackgroundFetchResult> |
Richiamato per indicare all'app che può avviare un'operazione di recupero se contiene dati da scaricare. |
SceneContinueUserActivity |
UIKit.UIScene , Foundation.NSUserActivity |
Richiamato per gestire l'attività correlata all'handoff specificata. |
SceneDidDisconnect |
UIKit.UIScene |
Richiamato quando una scena viene rimossa dall'app. |
SceneDidEnterBackground |
UIKit.UIScene |
Richiamato quando una scena è in esecuzione in background e non è sullo schermo. |
SceneDidFailToContinueUserActivity |
UIKit.UIScene , string , Foundation.NSError |
Richiamato per informare l'utente che non è stato possibile completare l'attività. |
SceneDidUpdateUserActivity |
UIKit.UIScene , Foundation.NSUserActivity |
Richiamato quando l'attività specificata viene aggiornata. |
SceneOnActivated |
UIKit.UIScene |
Richiamato quando la scena diventa attiva e in grado di rispondere agli eventi utente. |
SceneOnResignActivation |
UIKit.UIScene |
Richiamato quando la scena sta per riassegnare lo stato attivo e interrompere la risposta agli eventi utente. |
SceneOpenUrl |
UIKit.UIScene , Foundation.NSSet<UIKit.UIOpenUrlContext> |
Richiamato quando una scena chiede di aprire uno o più URL. |
SceneRestoreInteractionState |
UIKit.UIScene , Foundation.NSUserActivity |
Richiamato per ripristinare lo stato dell'attività. |
SceneWillConnect |
UIKit.UIScene , UIKit.UISceneSession , UIKit.UISceneConnectionOptions |
Richiamato quando viene aggiunta una scena all'app. |
SceneWillContinueUserActivity |
UIKit.UIScene , string |
Richiamato per preparare la ricezione dei dati correlati all'handoff. |
SceneWillEnterForeground |
UIKit.UIScene |
Richiamato quando una scena sta per essere eseguita in primo piano e diventare visibile all'utente. |
WillEnterForeground |
UIKit.UIApplication |
Richiamato se l'app verrà restituita da uno stato in background. |
WillFinishLaunching |
UIKit.UIApplication , Foundation.NSDictionary |
Richiamato all'avvio dell'app, ma il ripristino dello stato non è ancora stato eseguito. |
WillTerminate |
UIKit.UIApplication |
Richiamato se l'app viene terminata a causa di vincoli di memoria o direttamente dall'utente. |
WindowSceneDidUpdateCoordinateSpace |
UIKit.UIWindowScene , UIKit.IUICoordinateSpace , UIKit.UIInterfaceOrientation UIKit.UITraitCollection |
Richiamato quando cambiano le dimensioni, l'orientamento o i tratti di una scena. |
Importante
Ogni delegato, ad eccezione di PerformFetch
, ha un metodo di estensione con nome identico che può essere chiamato per registrare un gestore per il delegato.
Per rispondere a un delegato del ciclo di vita di iOS e Mac Catalyst richiamato, chiamare il ConfigureLifecycleEvents
metodo sull'oggetto MauiAppBuilder
nel CreateMauiapp
metodo della MauiProgram
classe. Quindi, nell'oggetto ILifecycleBuilder
chiamare il AddiOS
metodo e specificare che Action
registra i gestori per i delegati necessari:
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();
}
}
}
Per altre informazioni sul ciclo di vita dell'app iOS, vedere Gestione del ciclo di vita dell'app in developer.apple.com.
Finestre
La tabella seguente elenca i delegati MAUI .NET richiamati in risposta agli eventi del ciclo di vita di Windows generati:
Delegare | Argomenti | Descrizione |
---|---|---|
OnActivated |
Microsoft.UI.Xaml.Window , Microsoft.UI.Xaml.WindowActivatedEventArgs |
Richiamato quando viene generato l'evento della piattaforma Activated , se l'app non riprende. |
OnClosed |
Microsoft.UI.Xaml.Window , Microsoft.UI.Xaml.WindowEventArgs |
Richiamato quando viene generato l'evento della piattaforma Closed . |
OnLaunched |
Microsoft.UI.Xaml.Window , Microsoft.UI.Xaml.LaunchActivatedEventArgs |
Richiamato dall'override di Application.OnLaunched .NET MAUI dopo la creazione e l'attivazione della finestra nativa. |
OnLaunching |
Microsoft.UI.Xaml.Window , Microsoft.UI.Xaml.LaunchActivatedEventArgs |
Richiamato dall'override di .NET MAUI prima che Application.OnLaunched la finestra nativa sia stata creata e attivata. |
OnPlatformMessage |
Microsoft.UI.Xaml.Window , WindowsPlatformMessageEventArgs |
Richiamato quando .NET MAUI riceve messaggi nativi specifici di Windows. |
OnPlatformWindowSubclassed |
Microsoft.UI.Xaml.Window , WindowsPlatformWindowSubclassedEventArgs |
Richiamato da .NET MAUI quando la finestra Win32 è sottoclassata. |
OnResumed |
Microsoft.UI.Xaml.Window |
Richiamato quando viene generato l'evento della piattaforma Activated , se l'app riprende. |
OnVisibilityChanged |
Microsoft.UI.Xaml.Window , Microsoft.UI.Xaml.WindowVisibilityChangedEventArgs |
Richiamato quando viene generato l'evento della piattaforma VisibilityChanged . |
OnWindowCreated |
Microsoft.UI.Xaml.Window |
Richiamato quando viene creata la finestra nativa per la piattaforma multipiattaforma Window . |
.NET MAUI espone messaggi nativi specifici di Windows come evento del ciclo di vita con il OnPlatformMessage
delegato . L'oggetto WindowsPlatformMessageEventArgs
che accompagna questo delegato include una MessageId
proprietà di tipo uint
. Il valore di questa proprietà può essere esaminato per determinare quale messaggio è stato passato alla finestra dell'app. Per altre informazioni sui messaggi di Windows, vedere Messaggi di Windows (Introduzione a Win32 e C++). Per un elenco delle costanti dei messaggi della finestra, vedere Notifiche delle finestre.
Importante
Ogni delegato ha un metodo di estensione denominato identico, che può essere chiamato per registrare un gestore per il delegato.
Per rispondere a un delegato del ciclo di vita di Windows richiamato, chiamare il ConfigureLifecycleEvents
metodo sull'oggetto MauiAppBuilder
nel CreateMauiApp
metodo della MauiProgram
classe. Quindi, nell'oggetto ILifecycleBuilder
chiamare il AddWindows
metodo e specificare che Action
registra i gestori per i delegati necessari:
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();
}
}
}
Recuperare l'oggetto Window
Il codice della piattaforma può recuperare l'oggetto dell'app dagli eventi del ciclo di vita della Window
piattaforma, con il GetWindow
metodo di estensione:
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();
}
}
}
Eventi del ciclo di vita personalizzati
Anche se .NET MAUI definisce delegati richiamati in risposta agli eventi del ciclo di vita della piattaforma generati, espone solo un set comune di eventi del ciclo di vita della piattaforma. Include tuttavia anche un meccanismo, in genere per gli autori di librerie, che consente alle app di ricevere notifiche quando vengono generati eventi aggiuntivi del ciclo di vita della piattaforma. A tale scopo, seguire questa procedura:
- Registrare un gestore eventi per un evento del ciclo di vita della piattaforma che non è esposto da .NET MAUI.
- Nel gestore eventi per l'evento del ciclo di vita della piattaforma recuperare l'istanza
ILifecycleEventService
e chiamarneInvokeEvents
il metodo, specificando il nome dell'evento della piattaforma come argomento.
Quindi, le app che vogliono ricevere la notifica dell'evento del ciclo di vita della piattaforma devono modificare il CreateMauiApp
metodo della relativa MauiProgram
classe per chiamare il ConfigureLifecycleEvents
metodo sull'oggetto MauiAppBuilder
. Quindi, nell'oggetto ILifecycleBuilder
chiamare il AddEvent
metodo e specificare il nome dell'evento della piattaforma e l'oggetto Action
che verrà richiamato quando viene generato l'evento della piattaforma.
Esempio
L'evento WinUI 3 Window.SizeChanged si verifica quando è stato eseguito il primo rendering della finestra dell'app nativa o ha modificato le dimensioni di rendering. .NET MAUI non espone questo evento della piattaforma come evento del ciclo di vita. Tuttavia, le app possono ricevere notifiche quando questo evento della piattaforma viene generato usando l'approccio seguente:
Registrare un gestore eventi per l'evento del ciclo di vita della Window.SizeChanged piattaforma:
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(); }
Nel gestore eventi per l'evento del ciclo di vita della piattaforma recuperare l'istanza
ILifecycleEventService
e chiamarneInvokeEvents
il metodo, specificando il nome dell'evento della piattaforma come argomento: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
Il
MauiWinUIApplication
tipo in Windows può essere usato per accedere all'istanza dell'app nativa tramite la relativaCurrent
proprietà. IlMauiApplication
tipo in Android può essere usato per accedere all'istanza dell'app nativa. Analogamente, ilMauiUIApplicationDelegate
tipo in iOS può essere usato per accedere all'istanza dell'app nativa.Avviso
La chiamata di un evento non registrato, con il
InvokeEvents
metodo , non genera un'eccezione.CreateMauiApp
Nel metodo dellaMauiProgram
classe chiamare ilConfigureLifecycleEvents
metodo sull'oggettoMauiAppBuilder
. Quindi, nell'oggettoILifecycleBuilder
chiamare ilAddEvent
metodo e specificare il nome dell'evento della piattaforma e cheAction
verrà richiamato quando viene generato l'evento della piattaforma: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(); } } }
L'effetto complessivo è che quando un utente modifica le dimensioni della finestra dell'app in Windows, viene eseguita l'azione specificata nel AddEvent
metodo .
Nota
Il AddEvent
metodo dispone inoltre di un overload che consente di specificare un delegato.