前言
管理應用生命周期事件是開發應用程序時最常見的要求之一。同樣,有必要在跨平台應用程序(如 .NET MAUI應用)中處理應用生命周期,以提高其效率。
在這篇博客中,我將通過代碼示例分享如何在 .NET MAUI 應用中配置應用生命周期事件。
應用程序生命周期
通常,應用具有不同的生命周期或狀態。.NET MAUI 應用具有以下四個生命周期(執行狀態):
- 運行 (Running)
- 未運行 (Not running)
- 關閉 (Deactivated)
- 停止 (Stopped)
當窗口移動到每個狀態時,將觸發不同的事件。
跨平台生命周期
以下是跨平台應用中提供的一些預定義生命周期事件:
- Created: 應用從未運行狀態移動到正在運行狀態時發生。通常,當我們啟動新窗口時。
- Activated: 當窗口從未聚焦狀態移動到聚焦狀態(未聚焦 = 位於另一個窗口后面)時發生。
- Deactivated: 當窗口移動到未聚焦狀態時發生。
- Stopped: 在窗口變為隱藏時發生。例如,當我們將其最小化時。這樣,窗口就有可能被破壞。
- Resumed: 已停止事件的后續事件,但與創建的事件不同。
- Destroying: 在窗口被銷毀和解除分配時發生。
下面是映射圖,其中說明了 .NET MAUI 框架將如何映射本機事件。
如何配置生命周期事件
使用 .NET MAUI Preview 13,您可以使用 MauiAppBuilder 和 ConfigureLifecycleEvents 擴展方法輕松地在 MauiProgram 類中配置生命周期事件。此方法在 Microsoft.Maui.LifecycleEvents 命名空間中可用。
有關常見配置,請參閱以下代碼示例。
using Microsoft.Maui.LifecycleEvents;
namespace MauiApp1;
public static class MauiProgram
{
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder();
builder
.UseMauiApp<App>()
.ConfigureFonts(fonts =>
{
fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
}).ConfigureLifecycleEvents(app =>
{
//Code...
});
return builder.Build();
}
}
特定於平台的生命周期事件
您還可以為自定義設置引發特定於平台的事件。下面列舉了每個平台的特定事件(可用):
Android
目前,有以下 21 個特定於 Android 平台的事件可用:
- OnActivityResult
- OnApplicationConfigurationChanged
- OnApplicationCreate
- OnApplicationCreating
- OnApplicationLowMemory
- OnApplicationTrimMemory
- OnBackPressed
- OnConfigurationChanged
- OnCreate
- OnDestroy
- OnNewIntent
- OnPause
- OnPostCreate
- OnPostResume
- OnRequestPermissionsResult
- OnRestart
- OnRestoreInstanceState
- OnResume
- OnSaveInstanceState
- OnStart
- OnStop
您可以使用編譯器指令通過 AddAndroid() 擴展方法調用特定於 Android 平台的事件。
請參閱下面的代碼示例。在這里,我們將調用 OnBackPressed 事件以移動到上一個目標。
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder();
builder
.UseMauiApp<App>()
.ConfigureFonts(fonts =>
{
fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
}).ConfigureLifecycleEvents(AppLifecycle =>
{
#if ANDROID
AppLifecycle.AddAndroid(android => android
.OnBackPressed((activity) => BackPressed()));
#endif
});
return builder.Build();
}
static bool BackPressed()
{
return true;
}
IOS
目前,有以下 10 個特定於 iOS 平台的事件可用:
- ContinueUserActivity
- DidEnterBackground
- FinishedLaunching
- OnActivated
- OnResignActivation
- OpenUrl
- PerformActionForShortcutItem
- WillEnterForeground
- WillFinishLaunching
- WillTerminate
您可以使用編譯器指令通過 AddiOS() 擴展方法調用特定於 iOS 平台的事件。
請參閱下面的代碼示例。在這里,我們將調用 WillEnterForeground 事件,該事件將在應用處於焦點模式時引發。
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder();
builder.UseMauiApp<App>()
builder.ConfigureLifecycleEvents(AppLifecycle => {
#if IOS
AppLifecycle.AddiOS(ios => ios
.WillEnterForeground((app) => EnteredForeground())
);
#endif
});
return builder.Build();
}
static void EnterForeground()
{
}
Windows
目前,以下 8 個特定於 Windows 平台的事件可用:
- OnActivated
- OnClosed
- OnLaunched
- OnLaunching
- OnNativeMessage
- OnResumed
- OnVisibilityChanged
- OnWindowCreated
您可以使用編譯器指令通過 AddWindows() 擴展方法來調用特定於 Windows 平台的事件。
請參閱下面的代碼示例。在這里,我們將調用 OnNativeMessage 事件來訪問應用程序實例並刪除標題欄。
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder();
builder.UseMauiApp<App>()
builder.ConfigureLifecycleEvents(AppLifecycle => {
#if WINDOWS
AppLifecycle
.AddWindows(windows =>
windows.OnNativeMessage((app, args) => {
app.ExtendsContentIntoTitleBar = false;
}));
#endif
});
return builder.Build();
}
關於不同平台的生命周期事件定義位置: Core > LifecycleEvents
參考
有關更多詳細信息,請參閱 .NET MAUI 應用程序生命周期事件文檔。