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:
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 |
Activated Aku 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 ketikaCreated
peristiwa dinaikkan.OnActivated
, yang dipanggil ketikaActivated
peristiwa dinaikkan.OnDeactivated
, yang dipanggil ketikaDeactivated
peristiwa dinaikkan.OnStopped
, yang dipanggil ketikaStopped
peristiwa dinaikkan.OnResumed
, yang dipanggil ketikaResumed
peristiwa dinaikkan.OnDestroying
, yang dipanggil ketikaDestroying
peristiwa dinaikkan.OnBackgrounding
, yang dipanggil ketikaBackgrounding
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 , , int Android.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 , , int string[] ,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 , , OnRestart atau 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.NSUserActivity UIKit.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.UIApplicationShortcutItem UIKit.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 , , string Foundation.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.UISceneSession UIKit.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.IUICoordinateSpace UIKit.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 metodenyaInvokeEvents
, 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 metodenyaInvokeEvents
, 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
. JenisMauiApplication
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
, panggilConfigureLifecycleEvents
metode padaMauiAppBuilder
objek . Kemudian, padaILifecycleBuilder
objek, panggilAddEvent
metode dan tentukan nama peristiwa platform danAction
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.
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk