首頁 > 軟體

在.NET MAUI應用中設定應用生命週期事件

2022-03-28 13:00:20

前言

管理應用生命週期事件是開發應用程式時最常見的要求之一。同樣,有必要在跨平臺應用程式(如 .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 應用程式生命週期事件檔案

到此這篇關於在.NET MAUI應用中設定應用生命週期事件的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com