Bagikan melalui


Siklus hidup aplikasi

Aplikasi .NET Multi-platform App UI (.NET MAUI) umumnya memiliki empat status eksekusi: tidak berjalan, berjalan, dinonaktifkan, dan dihentikan. .NET MAUI menaikkan peristiwa siklus hidup lintas platform pada Window kelas ketika aplikasi beralih dari status tidak berjalan ke status berjalan, status berjalan ke status dinonaktifkan, status dinonaktifkan ke status berhenti, status berhenti ke status berjalan, dan status berhenti ke status tidak berjalan.

Diagram berikut menunjukkan gambaran umum siklus hidup aplikasi .NET MAUI:

Siklus hidup aplikasi .NET MAUI

Dalam diagram, oval abu-abu menunjukkan bahwa aplikasi tidak dimuat ke dalam memori. Oval biru muda menunjukkan bahwa aplikasi dalam memori. Teks pada busur menunjukkan peristiwa yang dinaikkan oleh .NET MAUI, yang menyediakan pemberitahuan ke aplikasi yang sedang berjalan.

Status eksekusi aplikasi bergantung pada riwayat aplikasi. Misalnya, saat aplikasi diinstal untuk pertama kalinya, atau perangkat dimulai, aplikasi dapat dianggap tidak berjalan. Saat aplikasi dimulai, Created peristiwa dan Activated dinaikkan dan aplikasi sedang berjalan. Jika jendela aplikasi yang berbeda mendapatkan fokus, Deactivated peristiwa akan dinaikkan dan aplikasi dinonaktifkan. Jika pengguna beralih ke aplikasi lain atau kembali ke layar Utama perangkat, sehingga jendela aplikasi tidak lagi terlihat, Deactivated peristiwa dan Stopped dinaikkan dan aplikasi dihentikan. Jika pengguna kembali ke aplikasi, Resuming peristiwa akan dinaikkan dan aplikasi sedang berjalan. Atau, aplikasi mungkin dihentikan oleh pengguna saat sedang berjalan. Dalam situasi ini aplikasi dinonaktifkan lalu dihentikan, Destroying peristiwa dinaikkan, dan aplikasi tidak berjalan. Demikian pula, perangkat mungkin menghentikan aplikasi saat dihentikan, karena pembatasan sumber daya, dan Destroying peristiwa dinaikkan dan aplikasi tidak berjalan.

Selain itu, .NET MAUI memungkinkan aplikasi untuk diberi tahu saat peristiwa siklus hidup platform dinaikkan. Untuk informasi selengkapnya, lihat Peristiwa siklus hidup platform.

Peristiwa siklus hidup lintas platform

Kelas Window mendefinisikan peristiwa siklus hidup lintas platform berikut:

Kejadian Deskripsi Tindakan yang harus diambil
Created Kejadian ini dimunculkan setelah jendela asli dibuat. Pada titik ini jendela lintas platform akan memiliki penangan jendela asli, tetapi jendela mungkin belum terlihat.
Activated Kejadian ini dinaikkan ketika jendela telah diaktifkan, dan, atau akan menjadi, jendela yang difokuskan.
Deactivated Kejadian ini dinaikkan ketika jendela tidak lagi menjadi jendela yang difokuskan. Namun, jendela mungkin masih terlihat.
Stopped Kejadian ini dinaikkan ketika jendela tidak lagi terlihat. Tidak ada jaminan bahwa aplikasi akan dilanjutkan dari status ini, karena dapat dihentikan oleh sistem operasi. Putuskan sambungan dari proses yang berjalan lama, atau batalkan permintaan tertunda yang mungkin menggunakan sumber daya perangkat.
Resumed Kejadian ini dimunculkan saat aplikasi dilanjutkan setelah dihentikan. Kejadian ini tidak akan dinaikkan saat pertama kali aplikasi Anda diluncurkan, dan hanya dapat dinaikkan jika Stopped acara sebelumnya telah dinaikkan. Berlangganan ke peristiwa yang diperlukan, dan refresh konten apa pun yang ada di halaman yang terlihat.
Destroying Kejadian ini dimunculkan ketika jendela asli sedang dihancurkan dan dibatalkan alokasinya. Jendela lintas platform yang sama dapat digunakan terhadap jendela asli baru saat aplikasi dibuka kembali. Hapus langganan peristiwa apa pun yang telah Anda lampirkan ke jendela asli.

Peristiwa lintas platform ini memetakan ke peristiwa platform yang berbeda, dan tabel berikut menunjukkan pemetaan ini:

Kejadian Android iOS Windows
Created OnPostCreate FinishedLaunching Created
Activated OnResume OnActivated Activated (CodeActivated dan PointerActivated)
Deactivated OnPause OnResignActivation ActivatedAku akan menemuinya.Deactivated
Stopped OnStop DidEnterBackground VisibilityChanged
Resumed OnRestart WillEnterForeground Resumed
Destroying OnDestroy WillTerminate Closed

Selain itu, Window kelas juga mendefinisikan Backgrounding peristiwa yang dimunculkan di iOS dan Mac Catalyst saat Jendela ditutup atau memasuki status latar belakang. Objek BackgroundingEventArgs yang menyertai peristiwa ini, dan status apa pun string harus dipertahankan ke State properti BackgroundingEventArgs objek, yang akan dipertahankan OS sampai saatnya untuk melanjutkan jendela. Ketika jendela dilanjutkan, status disediakan oleh IActivationState argumen ke penimpaan CreateWindow .

Selain peristiwa ini, Window kelas juga memiliki metode siklus hidup yang dapat diganti berikut:

  • OnCreated, yang dipanggil ketika Created peristiwa dinaikkan.
  • OnActivated, yang dipanggil ketika Activated peristiwa dinaikkan.
  • OnDeactivated, yang dipanggil ketika Deactivated peristiwa dinaikkan.
  • OnStopped, yang dipanggil ketika Stopped peristiwa dinaikkan.
  • OnResumed, yang dipanggil ketika Resumed peristiwa dinaikkan.
  • OnDestroying, yang dipanggil ketika Destroying peristiwa dinaikkan.
  • OnBackgrounding, yang dipanggil ketika Backgrounding peristiwa dinaikkan.

Untuk berlangganan Window peristiwa siklus hidup, ambil alih CreateWindow metode di kelas Anda App untuk membuat Window instans tempat Anda dapat berlangganan peristiwa:

namespace MyMauiApp
{
    public partial class App : Application
    {
        public App()
        {
            InitializeComponent();

            MainPage = new MainPage();
        }

        protected override Window CreateWindow(IActivationState activationState)
        {
            Window window = base.CreateWindow(activationState);

            window.Created += (s, e) =>
            {
                // Custom logic
            };

            return window;
        }
    }
}

Atau, untuk mengonsumsi penggantian siklus hidup, buat kelas yang berasal dari Window kelas

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

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

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

Kelas Window-turunan kemudian dapat dikonsumsi dengan mengambil alih CreateWindow metode di kelas Anda App untuk mengembalikan MyWindow instans.

Peringatan

InvalidOperationException Akan dilemparkan jika App.MainPage properti diatur dan CreateWindow metode membuat Window objek menggunakan penimpaan Page yang menerima argumen.

Peristiwa siklus hidup platform

.NET MAUI mendefinisikan delegasi yang dipanggil sebagai respons terhadap peristiwa siklus hidup platform yang dimunculkan. Handler dapat ditentukan untuk delegasi ini, menggunakan metode bernama atau fungsi anonim, yang dijalankan saat delegasi dipanggil. Mekanisme ini memungkinkan aplikasi untuk diberi tahu ketika peristiwa siklus hidup platform umum dinaikkan.

Penting

Metode ConfigureLifecycleEvents ini ada di Microsoft.Maui.LifecycleEvents namespace layanan.

Android

Tabel berikut mencantumkan delegasi .NET MAUI yang dipanggil sebagai respons terhadap peristiwa siklus hidup Android yang dimunculkan:

Delegasikan Argumen Deskripsi Komentar
OnActivityResult Android.App.Activity, , intAndroid.App.Result,Android.Content.Intent? Dipanggil saat aktivitas yang Anda luncurkan keluar.
OnApplicationConfigurationChanged Android.App.Application, Android.Content.Res.Configuration Dipanggil saat konfigurasi perangkat berubah saat komponen Anda berjalan.
OnApplicationCreate Android.App.Application Dipanggil saat aplikasi telah dimulai, sebelum aktivitas, layanan, atau objek penerima (tidak termasuk penyedia konten) telah dibuat.
OnApplicationCreating Android.App.Application Dipanggil saat aplikasi dimulai, sebelum aktivitas, layanan, atau objek penerima (tidak termasuk penyedia konten) telah dibuat.
OnApplicationLowMemory Android.App.Application Dipanggil ketika sistem hampir kehabisan memori, dan proses yang berjalan secara aktif harus memangkas penggunaan memori mereka.
OnApplicationTrimMemory Android.App.Application, Android.Content.TrimMemory Dipanggil ketika sistem operasi telah menentukan bahwa ini adalah waktu yang tepat bagi proses untuk memangkas memori yang tidak diperlukan dari prosesnya.
OnBackPressed Android.App.Activity Dipanggil ketika aktivitas telah mendeteksi tekan tombol belakang.
OnConfigurationChanged Android.App.Activity, Android.Content.Res.Configuration Dipanggil saat konfigurasi perangkat berubah saat aktivitas Anda berjalan.
OnCreate Android.App.Activity, Android.OS.Bundle? Dimunculkan saat aktivitas dibuat.
OnDestroy Android.App.Activity Dipanggil ketika aktivitas selesai, atau karena sistem untuk sementara menghancurkan instans aktivitas untuk menghemat ruang. Selalu panggil implementasi kelas super.
OnNewIntent Android.App.Activity, Android.Content.Intent? Dipanggil saat aktivitas dijalankan kembali saat berada di bagian atas tumpukan aktivitas alih-alih instans baru aktivitas yang dimulai.
OnPause Android.App.Activity Dipanggil ketika aktivitas masuk ke latar belakang, tetapi belum dimatikan. Selalu panggil implementasi kelas super.
OnPostCreate Android.App.Activity, Android.OS.Bundle? Dipanggil ketika startup aktivitas selesai, setelah OnStart dan OnRestoreInstanceState telah dipanggil. Selalu panggil implementasi kelas super. Ini adalah peristiwa khusus sistem yang umumnya tidak boleh digunakan oleh aplikasi.
OnPostResume Android.App.Activity Dipanggil ketika resume aktivitas selesai, setelah OnResume dipanggil. Selalu panggil implementasi kelas super. Ini adalah peristiwa khusus sistem yang umumnya tidak boleh digunakan oleh aplikasi.
OnRequestPermissionsResult Android.App.Activity, , intstring[],Android.Content.PM.Permission[] Dipanggil sebagai panggilan balik untuk hasil dari meminta izin.
OnRestart Android.App.Activity Dipanggil setelah OnStop ketika aktivitas saat ini sedang diputar ulang ke pengguna (pengguna telah menavigasi kembali ke sana). Selalu panggil implementasi kelas super.
OnRestoreInstanceState Android.App.Activity, Android.OS.Bundle Dipanggil setelah OnStart ketika aktivitas sedang diinisialisasi ulang dari status yang disimpan sebelumnya.
OnResume Android.App.Activity Dipanggil setelah OnRestoreInstanceState, , OnRestartatau OnPause, untuk menunjukkan bahwa aktivitas aktif dan siap untuk menerima input.
OnSaveInstanceState Android.App.Activity, Android.OS.Bundle Dipanggil untuk mengambil status per instans dari aktivitas yang dimatikan sehingga status dapat dipulihkan di OnCreate atau OnRestoreInstanceState.
OnStart Android.App.Activity Dipanggil setelah OnCreate atau OnRestart ketika aktivitas telah dihentikan, tetapi sekarang ditampilkan kepada pengguna. Selalu panggil implementasi kelas super.
OnStop Android.App.Activity Dipanggil ketika aktivitas tidak lagi terlihat oleh pengguna. Selalu panggil implementasi kelas super.

Penting

Setiap delegasi memiliki metode ekstensi bernama identik yang sesuai, yang dapat dipanggil untuk mendaftarkan handler untuk delegasi.

Untuk menanggapi delegasi siklus hidup Android yang dipanggil, panggil ConfigureLifecycleEvents metode pada MauiAppBuilder objek dalam CreateMauiapp metode kelas Anda MauiProgram . Kemudian, pada ILifecycleBuilder objek, panggil AddAndroid metode dan tentukan Action yang mendaftarkan handler untuk delegasi yang diperlukan:

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

Untuk informasi selengkapnya tentang siklus hidup aplikasi Android, lihat Memahami Siklus Hidup Aktivitas di developer.android.com.

iOS

Tabel berikut mencantumkan delegasi .NET MAUI yang dipanggil sebagai respons terhadap peristiwa siklus hidup iOS yang dimunculkan:

Delegasikan Argumen Deskripsi
ApplicationSignificantTimeChange UIKit.UIApplication Dipanggil ketika perubahan waktu yang signifikan terjadi, seperti tengah malam, waktu yang diubah operator, atau awal atau penghentian penghematan siang hari.
ContinueUserActivity UIKit.UIApplication, , Foundation.NSUserActivityUIKit.UIApplicationRestorationHandler Dipanggil saat aplikasi menerima data yang terkait dengan aktivitas pengguna, seperti mentransfer aktivitas dari perangkat lain menggunakan Handoff.
DidEnterBackground UIKit.UIApplication Dipanggil saat aplikasi telah memasuki latar belakang.
FinishedLaunching UIKit.UIApplication, Foundation.NSDictionary Dipanggil saat aplikasi telah diluncurkan.
OnActivated UIKit.UIApplication Dipanggil saat aplikasi diluncurkan dan setiap kali aplikasi kembali ke latar depan.
OnResignActivation UIKit.UIApplication Dipanggil saat aplikasi akan memasuki latar belakang, ditangguhkan, atau saat pengguna menerima gangguan seperti panggilan telepon atau teks.
OpenUrl UIKit.UIApplication, Foundation.NSDictionary Dipanggil saat aplikasi harus membuka URL tertentu.
PerformActionForShortcutItem UIKit.UIApplication, , UIKit.UIApplicationShortcutItemUIKit.UIOperationHandler Dipanggil saat tindakan cepat layar Beranda dimulai.
PerformFetch UIKit.UIApplication, Action<UIBackgroundFetchResult> Dipanggil untuk memberi tahu aplikasi bahwa aplikasi dapat memulai operasi pengambilan jika memiliki data untuk diunduh.
SceneContinueUserActivity UIKit.UIScene, Foundation.NSUserActivity Dipanggil untuk menangani aktivitas terkait Handoff yang ditentukan.
SceneDidDisconnect UIKit.UIScene Dipanggil saat adegan dihapus dari aplikasi.
SceneDidEnterBackground UIKit.UIScene Dipanggil saat adegan berjalan di latar belakang dan tidak di layar.
SceneDidFailToContinueUserActivity UIKit.UIScene, , stringFoundation.NSError Dipanggil untuk memberi tahu pengguna bahwa aktivitas tidak dapat diselesaikan.
SceneDidUpdateUserActivity UIKit.UIScene, Foundation.NSUserActivity Dipanggil ketika aktivitas yang ditentukan diperbarui.
SceneOnActivated UIKit.UIScene Dipanggil saat adegan menjadi aktif dan dapat merespons peristiwa pengguna.
SceneOnResignActivation UIKit.UIScene Dipanggil saat adegan akan mengundurkan status aktif dan berhenti merespons peristiwa pengguna.
SceneOpenUrl UIKit.UIScene, Foundation.NSSet<UIKit.UIOpenUrlContext> Dipanggil saat adegan meminta untuk membuka satu atau beberapa URL.
SceneRestoreInteractionState UIKit.UIScene, Foundation.NSUserActivity Dipanggil untuk memulihkan status aktivitas.
SceneWillConnect UIKit.UIScene, , UIKit.UISceneSessionUIKit.UISceneConnectionOptions Dipanggil saat adegan ditambahkan ke aplikasi.
SceneWillContinueUserActivity UIKit.UIScene, string Dipanggil untuk bersiap menerima data terkait Handoff.
SceneWillEnterForeground UIKit.UIScene Dipanggil ketika adegan akan berjalan di latar depan dan menjadi terlihat oleh pengguna.
WillEnterForeground UIKit.UIApplication Dipanggil jika aplikasi akan kembali dari status latar belakang.
WillFinishLaunching UIKit.UIApplication, Foundation.NSDictionary Dipanggil saat peluncuran aplikasi telah dimulai, tetapi pemulihan status belum terjadi.
WillTerminate UIKit.UIApplication Dipanggil jika aplikasi dihentikan karena kendala memori, atau langsung oleh pengguna.
WindowSceneDidUpdateCoordinateSpace UIKit.UIWindowScene, , UIKit.IUICoordinateSpaceUIKit.UIInterfaceOrientation,UIKit.UITraitCollection Dipanggil saat ukuran, orientasi, atau sifat adegan berubah.

Penting

Setiap delegasi, dengan pengecualian PerformFetch, memiliki metode ekstensi bernama identik yang sesuai yang dapat dipanggil untuk mendaftarkan handler untuk delegasi.

Untuk menanggapi delegasi siklus hidup iOS yang dipanggil, panggil ConfigureLifecycleEvents metode pada MauiAppBuilder objek dalam CreateMauiapp metode kelas Anda MauiProgram . Kemudian, pada ILifecycleBuilder objek, panggil AddiOS metode dan tentukan Action yang mendaftarkan handler untuk delegasi yang diperlukan:

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

Untuk informasi selengkapnya tentang siklus hidup aplikasi iOS, lihat Mengelola Siklus Hidup Aplikasi Anda di developer.apple.com.

Windows

Tabel berikut mencantumkan delegasi .NET MAUI yang dipanggil sebagai respons terhadap peristiwa siklus hidup Windows yang dimunculkan:

Delegasikan Argumen Deskripsi
OnActivated Microsoft.UI.Xaml.Window, Microsoft.UI.Xaml.WindowActivatedEventArgs Dipanggil saat peristiwa platform Activated dinaikkan, jika aplikasi tidak melanjutkan.
OnClosed Microsoft.UI.Xaml.Window, Microsoft.UI.Xaml.WindowEventArgs Dipanggil ketika peristiwa platform Closed dinaikkan.
OnLaunched Microsoft.UI.Xaml.Window, Microsoft.UI.Xaml.LaunchActivatedEventArgs Dipanggil oleh penimpaan .NET MAUI Application.OnLaunched setelah jendela asli dibuat dan diaktifkan.
OnLaunching Microsoft.UI.Xaml.Window, Microsoft.UI.Xaml.LaunchActivatedEventArgs Dipanggil oleh penimpaan .NET MAUI Application.OnLaunched sebelum jendela asli dibuat dan diaktifkan.
OnPlatformMessage Microsoft.UI.Xaml.Window, WindowsPlatformMessageEventArgs Dipanggil ketika .NET MAUI menerima pesan Windows asli tertentu.
OnPlatformWindowSubclassed Microsoft.UI.Xaml.Window, WindowsPlatformWindowSubclassedEventArgs Dipanggil oleh .NET MAUI ketika jendela Win32 disubkelas.
OnResumed Microsoft.UI.Xaml.Window Dipanggil saat peristiwa platform Activated dinaikkan, jika aplikasi melanjutkan.
OnVisibilityChanged Microsoft.UI.Xaml.Window, Microsoft.UI.Xaml.WindowVisibilityChangedEventArgs Dipanggil ketika peristiwa platform VisibilityChanged dinaikkan.
OnWindowCreated Microsoft.UI.Xaml.Window Dipanggil ketika jendela asli dibuat untuk lintas platform Window.

.NET MAUI mengekspos pesan Windows asli tertentu sebagai peristiwa siklus hidup dengan OnPlatformMessage delegasi. Objek WindowsPlatformMessageEventArgs yang menyertai delegasi ini mencakup MessageId properti, jenis uint. Nilai properti ini dapat diperiksa untuk menentukan pesan mana yang telah diteruskan ke jendela aplikasi Anda. Untuk informasi selengkapnya tentang pesan windows, lihat Pesan Windows (Mulai menggunakan Win32 dan C++). Untuk daftar konstanta pesan jendela, lihat Pemberitahuan jendela.

Penting

Setiap delegasi memiliki metode ekstensi bernama identik yang sesuai, yang dapat dipanggil untuk mendaftarkan handler untuk delegasi.

Untuk menanggapi delegasi siklus hidup Windows yang dipanggil, panggil ConfigureLifecycleEvents metode pada MauiAppBuilder objek dalam CreateMauiApp metode kelas Anda MauiProgram . Kemudian, pada ILifecycleBuilder objek, panggil AddWindows metode dan tentukan Action yang mendaftarkan handler untuk delegasi yang diperlukan:

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

Mengambil objek Jendela

Kode platform dapat mengambil objek aplikasi Window dari peristiwa siklus hidup platform, dengan GetWindow metode ekstensi:

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

Peristiwa siklus hidup kustom

Sementara .NET MAUI mendefinisikan delegasi yang dipanggil sebagai respons terhadap peristiwa siklus hidup platform yang dimunculkan, itu hanya mengekspos serangkaian peristiwa siklus hidup platform umum. Namun, ini juga mencakup mekanisme, biasanya untuk penulis pustaka, yang memungkinkan aplikasi diberi tahu ketika peristiwa siklus hidup platform tambahan dinaikkan. Proses untuk mencapai hal ini adalah sebagai berikut:

  • Daftarkan penanganan aktivitas untuk peristiwa siklus hidup platform yang tidak diekspos oleh .NET MAUI.
  • Dalam penanganan aktivitas untuk peristiwa siklus hidup platform, ambil ILifecycleEventService instans dan panggil metodenya InvokeEvents , tentukan nama peristiwa platform sebagai argumennya.

Kemudian, aplikasi yang ingin menerima pemberitahuan peristiwa siklus hidup platform harus memodifikasi CreateMauiApp metode kelas mereka MauiProgram untuk memanggil ConfigureLifecycleEvents metode pada MauiAppBuilder objek. Kemudian, pada ILifecycleBuilder objek, panggil AddEvent metode dan tentukan nama peristiwa platform dan Action yang akan dipanggil saat peristiwa platform dinaikkan.

Contoh

Peristiwa WinUI 3 Window.SizeChanged terjadi ketika jendela aplikasi asli telah pertama kali dirender, atau telah mengubah ukuran penyajiannya. .NET MAUI tidak mengekspos peristiwa platform ini sebagai peristiwa siklus hidup. Namun, aplikasi dapat menerima pemberitahuan ketika peristiwa platform ini dinaikkan dengan menggunakan pendekatan berikut:

  • Daftarkan penanganan aktivitas untuk Window.SizeChanged peristiwa siklus hidup platform:

    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();
    }    
    
  • Dalam penanganan aktivitas untuk peristiwa siklus hidup platform, ambil ILifecycleEventService instans dan panggil metodenya InvokeEvents , tentukan nama peristiwa platform sebagai argumennya:

    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
    

    MauiWinUIApplication Jenis pada Windows dapat digunakan untuk mengakses instans aplikasi asli melalui propertinyaCurrent. Jenis MauiApplication di Android dapat digunakan untuk mengakses instans aplikasi asli. Demikian pula, MauiUIApplicationDelegate jenis di iOS dapat digunakan untuk mengakses instans aplikasi asli.

    Peringatan

    Memanggil peristiwa yang tidak terdaftar, dengan metode , InvokeEvents tidak melemparkan pengecualian.

  • CreateMauiApp Dalam metode kelas AndaMauiProgram, panggil ConfigureLifecycleEvents metode pada MauiAppBuilder objek . Kemudian, pada ILifecycleBuilder objek, panggil AddEvent metode dan tentukan nama peristiwa platform dan Action yang akan dipanggil ketika peristiwa platform dinaikkan:

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

Efek keseluruhannya adalah ketika pengguna mengubah ukuran jendela aplikasi di Windows, tindakan yang ditentukan dalam AddEvent metode dijalankan.

Catatan

Metode ini AddEvent juga memiliki kelebihan beban yang memungkinkan delegasi ditentukan.