Uygulama yaşam döngüsü

.NET Çok Platformlu Uygulama Kullanıcı Arabirimi (.NET MAUI) uygulamalarının genellikle dört yürütme durumu vardır: çalışmıyor, çalışmıyor, devre dışı bırakıldı ve durduruldu. .NET MAUI, bir uygulama çalışmıyor durumundan çalışma durumuna, çalışma durumundan devre dışı bırakılmış duruma, devre dışı bırakılmış durumdan durdurulmuş duruma, durdurulan durumdan çalışma durumuna ve durdurulan durum çalışmıyor durumuna geçtiğinde sınıfta platformlar arası yaşam döngüsü olaylarını Window tetikler.

Aşağıdaki diyagramda .NET MAUI uygulama yaşam döngüsüne genel bir bakış gösterilmektedir:

.NET MAUI app lifecycle

Diyagramda gri oval, uygulamanın belleğe yüklenmediğini gösterir. Açık mavi ovaller, uygulamanın bellekte olduğunu gösterir. Yaylardaki metin, çalışan uygulamaya bildirim sağlayan .NET MAUI tarafından tetiklenen olayları gösterir.

Bir uygulamanın yürütme durumu, uygulamanın geçmişine bağlıdır. Örneğin, bir uygulama ilk kez yüklendiğinde veya bir cihaz başlatıldığında, uygulamanın çalışmadığı düşünülebilir. Uygulama başlatıldığında ve CreatedActivated olayları oluşturulur ve uygulama çalışır. Farklı bir uygulama penceresi odak kazanırsa olay Deactivated oluşturulur ve uygulama devre dışı bırakılır. Kullanıcı farklı bir uygulamaya geçerse veya cihazın Giriş ekranına geri dönerse, uygulama penceresi artık görünür olmaz, Deactivated ve Stopped olayları oluşturulur ve uygulama durdurulur. Kullanıcı uygulamaya geri dönerse olay Resuming oluşturulur ve uygulama çalışır. Alternatif olarak, bir uygulama çalışırken bir kullanıcı tarafından sonlandırılabilir. Bu durumda uygulama devre dışı bırakılır , ardından durdurulur, Destroying olay tetikler ve uygulama çalışmaz. Benzer şekilde bir cihaz, kaynak kısıtlamaları nedeniyle durdurulduğu sırada uygulamayı sonlandırabilir ve Destroying olay tetiklenip uygulama çalışmıyor olabilir.

Ayrıca .NET MAUI, platform yaşam döngüsü olayları oluşturulduğunda uygulamaların bilgilendirilmesini sağlar. Daha fazla bilgi için bkz . Platform yaşam döngüsü olayları.

Platformlar arası yaşam döngüsü olayları

Window sınıfı aşağıdaki platformlar arası yaşam döngüsü olaylarını tanımlar:

Olay Açıklama Gerçekleştirilecek eylem
Created Bu olay, yerel pencere oluşturulduktan sonra oluşturulur. Bu noktada platformlar arası pencerenin yerel bir pencere işleyicisi olacaktır, ancak pencere henüz görünür olmayabilir.
Activated Bu olay, pencere etkinleştirildiğinde oluşturulur ve odaklanmış pencere olur veya olur.
Deactivated Bu olay, pencere artık odaklanmış pencere olmadığında oluşturulur. Ancak, pencere hala görünebilir.
Stopped Pencere artık görünür olmadığında bu olay tetikleniyor. Bir uygulamanın bu durumdan devam etmesinin garantisi yoktur, çünkü işletim sistemi tarafından sonlandırılabilir. Uzun süre çalışan işlemlerin bağlantısını kesin veya cihaz kaynaklarını tüketebilecek bekleyen istekleri iptal edin.
Resumed Bu olay, bir uygulama durdurulduktan sonra devam ettiğinde tetiklenir. Bu olay, uygulamanız ilk kez başlatıldığında tetiklenmez ve yalnızca olay daha önce oluşturulduysa Stopped tetiklenebilir. Gerekli olaylara abone olun ve görünür sayfadaki tüm içeriği yenileyin.
Destroying Bu olay, yerel pencere yok edildiğinde ve serbest bırakıldığında tetiklenir. Aynı platformlar arası pencere, uygulama yeniden açıldığında yeni bir yerel pencerede kullanılabilir. Yerel pencereye eklediğiniz olay aboneliklerini kaldırın.

Bu platformlar arası olaylar farklı platform olaylarına eşler ve aşağıdaki tabloda bu eşleme gösterilir:

Olay Android iOS Windows
Created OnPostCreate FinishedLaunching Created
Activated OnResume OnActivated Activated (CodeActivated ve PointerActivated)
Deactivated OnPause OnResignActivation Activated (Deactivated)
Stopped OnStop DidEnterBackground VisibilityChanged
Resumed OnRestart WillEnterForeground Resumed
Destroying OnDestroy WillTerminate Closed

Ayrıca sınıfı, Window Pencere kapatıldığında veya arka plan durumuna girdiğinde iOS ve Mac Catalyst'te tetiklenen bir olayı da tanımlar Backgrounding . Bu olaya bir BackgroundingEventArgs nesne eşlik eder ve tüm string durumların nesnenin BackgroundingEventArgs özelliğinde State kalıcı olması gerekir; bu durum, işletim sisteminin pencereyi sürdürme zamanı gelene kadar bunu korur. Pencere devam ettirildiğinde, durum geçersiz kılma bağımsız değişkeni CreateWindow tarafından IActivationState sağlanır.

Sınıfı, Window bu olaylara ek olarak aşağıdaki geçersiz kılınabilir yaşam döngüsü yöntemlerine de sahiptir:

  • OnCreated, olay tetiklendiğinde Created çağrılır.
  • OnActivated, olay tetiklendiğinde Activated çağrılır.
  • OnDeactivated, olay tetiklendiğinde Deactivated çağrılır.
  • OnStopped, olay tetiklendiğinde Stopped çağrılır.
  • OnResumed, olay tetiklendiğinde Resumed çağrılır.
  • OnDestroying, olay tetiklendiğinde Destroying çağrılır.
  • OnBackgrounding, olay tetiklendiğinde Backgrounding çağrılır.

Yaşam döngüsü olaylarına abone olmak için Window sınıfınızdaki App yöntemini geçersiz kılarak CreateWindow olaylara abone olabileceğiniz bir Window örnek oluşturun:

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

Alternatif olarak, yaşam döngüsü geçersiz kılmalarını kullanmak için sınıfından Window türetilen bir sınıf oluşturun

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

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

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

-Windowderived sınıfı daha sonra sınıfınızda App bir MyWindow örneği döndürmek için yöntemi geçersiz kılınarak CreateWindow kullanılabilir.

Uyarı

InvalidOperationException özelliği ayarlanırsa ve CreateWindow yöntemi bağımsız değişken kabul eden geçersiz kılmayı kullanarak bir Window nesne oluşturursa App.MainPage bir Page oluşturulur.

Platform yaşam döngüsü olayları

.NET MAUI, tetiklenen platform yaşam döngüsü olaylarına yanıt olarak çağrılan temsilcileri tanımlar. Bu temsilciler için, temsilci çağrıldığında yürütülen adlandırılmış yöntemler veya anonim işlevler kullanılarak işleyiciler belirtilebilir. Bu mekanizma, yaygın platform yaşam döngüsü olayları tetiklendiğinde uygulamaların bildirilmesini sağlar.

Önemli

ConfigureLifecycleEvents yöntemi ad alanındadırMicrosoft.Maui.LifecycleEvents.

Android

Aşağıdaki tabloda, tetiklenen Android yaşam döngüsü olaylarına yanıt olarak çağrılan .NET MAUI temsilcileri listelenmektedir:

Temsilci Bağımsız Değişkenler Açıklama Açıklamalar
OnActivityResult Android.App.Activity, int, Android.App.Result, Android.Content.Intent? Başlattığınız bir etkinlik çıktığında çağrılır.
OnApplicationConfigurationChanged Android.App.Application, Android.Content.Res.Configuration Cihazınız çalışırken cihaz yapılandırması değiştiğinde çağrılır.
OnApplicationCreate Android.App.Application Uygulama başlatıldığında, etkinlik, hizmet veya alıcı nesneleri (içerik sağlayıcıları hariç) oluşturulmadan önce çağrılır.
OnApplicationCreating Android.App.Application Uygulama başlatıldığında, etkinlik, hizmet veya alıcı nesneleri (içerik sağlayıcıları hariç) oluşturulmadan önce çağrılır.
OnApplicationLowMemory Android.App.Application Sistem belleği azaldığında ve etkin olarak çalışan işlemler bellek kullanımını kırptığında çağrılır.
OnApplicationTrimMemory Android.App.Application, Android.Content.TrimMemory İşletim sistemi, bir işlemin gereksiz belleği işlemine göre kırpması için uygun bir zaman olduğunu belirlediğinde çağrılır.
OnBackPressed Android.App.Activity Etkinlik arka tuşuna basıldığını algıladığında çağrılır.
OnConfigurationChanged Android.App.Activity, Android.Content.Res.Configuration Etkinliğiniz çalışırken cihaz yapılandırması değiştiğinde çağrılır.
OnCreate Android.App.Activity, Android.OS.Bundle? Etkinlik oluşturulduğunda oluşturulur.
OnDestroy Android.App.Activity Etkinlik tamamlanırken veya sistem alandan tasarruf etmek için etkinlik örneğini geçici olarak yok ettiğinden çağrılır. Her zaman süper sınıfın uygulamasını çağırın.
OnNewIntent Android.App.Activity, Android.Content.Intent? Başlatılan etkinliğin yeni bir örneği yerine etkinlik yığınının en üstündeyken etkinlik yeniden başlatıldığında çağrılır.
OnPause Android.App.Activity Bir etkinlik arka plana geçtiğinde çağrılır, ancak henüz öldürülmemiştir. Her zaman süper sınıfın uygulamasını çağırın.
OnPostCreate Android.App.Activity, Android.OS.Bundle? Etkinlik başlatma tamamlandıktan sonra OnStart ve OnRestoreInstanceState çağrıldığında çağrılır. Her zaman süper sınıfın uygulamasını çağırın. Bu, genellikle uygulamalar tarafından kullanılmaması gereken, yalnızca sistem tarafından gerçekleştirilen bir olaydır.
OnPostResume Android.App.Activity Etkinlik özgeçmişi tamamlandığında, çağrıldıktan sonra OnResume çağrılır. Her zaman süper sınıfın uygulamasını çağırın. Bu, genellikle uygulamalar tarafından kullanılmaması gereken, yalnızca sistem tarafından gerçekleştirilen bir olaydır.
OnRequestPermissionsResult Android.App.Activity, int, string[], Android.Content.PM.Permission[] İzin isteme sonucu için geri çağırma olarak çağrılır.
OnRestart Android.App.Activity Geçerli etkinlik kullanıcıya yeniden dağıtıldıktan sonra OnStop çağrılır (kullanıcı bu etkinliğe geri dönmüştür). Her zaman süper sınıfın uygulamasını çağırın.
OnRestoreInstanceState Android.App.Activity, Android.OS.Bundle OnStart Etkinlik daha önce kaydedilmiş bir durumdan yeniden başlatıldığında çağrılır.
OnResume Android.App.Activity Etkinliğin etkin olduğunu ve giriş almaya hazır olduğunu belirtmek için , OnRestartveya OnPauseöğesinden sonra OnRestoreInstanceStateçağrılır.
OnSaveInstanceState Android.App.Activity, Android.OS.Bundle Durumun veya OnRestoreInstanceStateiçinde geri yüklenebilmesi için, öldürülmekte olan bir etkinlikten örnek başına durumu almak için çağrılırOnCreate.
OnStart Android.App.Activity Etkinlik durdurulduktan sonra OnCreate veya OnRestart etkinlik durdurulduğunda çağrılır, ancak şimdi kullanıcıya görüntülenir. Her zaman süper sınıfın uygulamasını çağırın.
OnStop Android.App.Activity Etkinlik artık kullanıcıya görünmediğinde çağrılır. Her zaman süper sınıfın uygulamasını çağırın.

Önemli

Her temsilci, temsilci için bir işleyici kaydetmek üzere çağrılabilen, karşılık gelen aynı adlı bir uzantı yöntemine sahiptir.

Çağrılan bir Android yaşam döngüsü temsilcisine yanıt vermek için sınıfınızın yöntemindeki MauiAppBuilder nesnede CreateMauiapp yöntemini çağırınConfigureLifecycleEvents.MauiProgram Ardından nesnesinde ILifecycleBuilder yöntemini çağırın AddAndroid ve gerekli temsilciler için işleyicileri kaydeden öğesini belirtin Action :

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

Android uygulama yaşam döngüsü hakkında daha fazla bilgi için bkz . developer.android.com etkinlik yaşam döngüsünü anlama.

iOS

Aşağıdaki tabloda, tetiklenen iOS yaşam döngüsü olaylarına yanıt olarak çağrılan .NET MAUI temsilcileri listelenmektedir:

Temsilci Bağımsız Değişkenler Açıklama
ApplicationSignificantTimeChange UIKit.UIApplication Gece yarısı, taşıyıcı değiştirme zamanı veya yaz saati başlangıcı veya durması gibi önemli bir zaman değişikliği gerçekleştiğinde çağrılır.
ContinueUserActivity UIKit.UIApplication, Foundation.NSUserActivity, UIKit.UIApplicationRestorationHandler Uygulama, bir kullanıcı etkinliğiyle ilişkili verileri aldığında (örneğin, Handoff kullanarak farklı bir cihazdan bir etkinliği aktarma) çağrılır.
DidEnterBackground UIKit.UIApplication Uygulama arka plana girdiğinde çağrılır.
FinishedLaunching UIKit.UIApplication, Foundation.NSDictionary Uygulama başlatıldığında çağrılır.
OnActivated UIKit.UIApplication Uygulama başlatıldığında ve uygulama ön plana her döndüğünde çağrılır.
OnResignActivation UIKit.UIApplication Uygulama arka planı girmek üzereyken, askıya alındığında veya kullanıcı telefon araması veya kısa mesaj gibi bir kesinti aldığında çağrılır.
OpenUrl UIKit.UIApplication, Foundation.NSDictionary Uygulamanın belirli bir URL'yi açması gerektiğinde çağrılır.
PerformActionForShortcutItem UIKit.UIApplication, UIKit.UIApplicationShortcutItem, UIKit.UIOperationHandler Giriş ekranı hızlı eylemi başlatıldığında çağrılır.
SceneContinueUserActivity UIKit.UIScene, Foundation.NSUserActivity Belirtilen İletim ile ilgili etkinliği işlemek için çağrılır.
SceneDidDisconnect UIKit.UIScene Uygulamadan bir sahne kaldırıldığında çağrılır.
SceneDidEnterBackground UIKit.UIScene Bir sahne arka planda çalışırken ve ekranda olmadığında çağrılır.
SceneDidFailToContinueUserActivity UIKit.UIScene, string, Foundation.NSError Kullanıcıya etkinliğin tamamlanamadığı konusunda bilgi vermek için çağrıldı.
SceneDidUpdateUserActivity UIKit.UIScene, Foundation.NSUserActivity Belirtilen etkinlik güncelleştirildiğinde çağrılır.
SceneOnActivated UIKit.UIScene Sahne etkin hale geldiğinde ve kullanıcı olaylarına yanıt verebildiğinde çağrılır.
SceneOnResignActivation UIKit.UIScene Sahne etkin durumdan vazgeçmek üzereyken çağrılır ve kullanıcı olaylarına yanıt vermeyi durdurur.
SceneOpenUrl UIKit.UIScene, Foundation.NSSet<UIKit.UIOpenUrlContext> Bir sahne bir veya daha fazla URL'yi açmak istediğinde çağrılır.
SceneRestoreInteractionState UIKit.UIScene, Foundation.NSUserActivity Etkinlik durumunu geri yüklemek için çağrılır.
SceneWillConnect UIKit.UIScene, UIKit.UISceneSession, UIKit.UISceneConnectionOptions Uygulamaya bir sahne eklendiğinde çağrılır.
SceneWillContinueUserActivity UIKit.UIScene, string İletim ile ilgili verileri almaya hazırlanmak için çağrılır.
SceneWillEnterForeground UIKit.UIScene Bir sahne ön planda çalışmak üzereyken çağrılır ve kullanıcı tarafından görülebilir hale gelir.
WillEnterForeground UIKit.UIApplication Uygulama arka planlı bir durumdan geri dönecekse çağrılır.
WillFinishLaunching UIKit.UIApplication, Foundation.NSDictionary Uygulama başlatma işlemi başladığında çağrılır, ancak durum geri yükleme işlemi henüz gerçekleşmemiştir.
WillTerminate UIKit.UIApplication Uygulama bellek kısıtlamaları nedeniyle veya doğrudan kullanıcı tarafından sonlandırılıyorsa çağrılır.
WindowSceneDidUpdateCoordinateSpace UIKit.UIWindowScene, UIKit.IUICoordinateSpace, UIKit.UIInterfaceOrientation, UIKit.UITraitCollection Bir sahnenin boyutu, yönü veya özellikleri değiştiğinde çağrılır.

Önemli

Her temsilci, temsilci için bir işleyici kaydetmek üzere çağrılabilen, karşılık gelen aynı adlı bir uzantı yöntemine sahiptir.

Temsilci Bağımsız Değişkenler Açıklama
ApplicationSignificantTimeChange UIKit.UIApplication Gece yarısı, taşıyıcı değiştirme zamanı veya yaz saati başlangıcı veya durması gibi önemli bir zaman değişikliği gerçekleştiğinde çağrılır.
ContinueUserActivity UIKit.UIApplication, Foundation.NSUserActivity, UIKit.UIApplicationRestorationHandler Uygulama, bir kullanıcı etkinliğiyle ilişkili verileri aldığında (örneğin, Handoff kullanarak farklı bir cihazdan bir etkinliği aktarma) çağrılır.
DidEnterBackground UIKit.UIApplication Uygulama arka plana girdiğinde çağrılır.
FinishedLaunching UIKit.UIApplication, Foundation.NSDictionary Uygulama başlatıldığında çağrılır.
OnActivated UIKit.UIApplication Uygulama başlatıldığında ve uygulama ön plana her döndüğünde çağrılır.
OnResignActivation UIKit.UIApplication Uygulama arka planı girmek üzereyken, askıya alındığında veya kullanıcı telefon araması veya kısa mesaj gibi bir kesinti aldığında çağrılır.
OpenUrl UIKit.UIApplication, Foundation.NSDictionary Uygulamanın belirli bir URL'yi açması gerektiğinde çağrılır.
PerformActionForShortcutItem UIKit.UIApplication, UIKit.UIApplicationShortcutItem, UIKit.UIOperationHandler Giriş ekranı hızlı eylemi başlatıldığında çağrılır.
PerformFetch UIKit.UIApplication, Action<UIBackgroundFetchResult> Uygulamaya indirilmesi gereken veriler varsa bir getirme işlemi başlatabileceğini bildirmek için çağrılır.
SceneContinueUserActivity UIKit.UIScene, Foundation.NSUserActivity Belirtilen İletim ile ilgili etkinliği işlemek için çağrılır.
SceneDidDisconnect UIKit.UIScene Uygulamadan bir sahne kaldırıldığında çağrılır.
SceneDidEnterBackground UIKit.UIScene Bir sahne arka planda çalışırken ve ekranda olmadığında çağrılır.
SceneDidFailToContinueUserActivity UIKit.UIScene, string, Foundation.NSError Kullanıcıya etkinliğin tamamlanamadığı konusunda bilgi vermek için çağrıldı.
SceneDidUpdateUserActivity UIKit.UIScene, Foundation.NSUserActivity Belirtilen etkinlik güncelleştirildiğinde çağrılır.
SceneOnActivated UIKit.UIScene Sahne etkin hale geldiğinde ve kullanıcı olaylarına yanıt verebildiğinde çağrılır.
SceneOnResignActivation UIKit.UIScene Sahne etkin durumdan vazgeçmek üzereyken çağrılır ve kullanıcı olaylarına yanıt vermeyi durdurur.
SceneOpenUrl UIKit.UIScene, Foundation.NSSet<UIKit.UIOpenUrlContext> Bir sahne bir veya daha fazla URL'yi açmak istediğinde çağrılır.
SceneRestoreInteractionState UIKit.UIScene, Foundation.NSUserActivity Etkinlik durumunu geri yüklemek için çağrılır.
SceneWillConnect UIKit.UIScene, UIKit.UISceneSession, UIKit.UISceneConnectionOptions Uygulamaya bir sahne eklendiğinde çağrılır.
SceneWillContinueUserActivity UIKit.UIScene, string İletim ile ilgili verileri almaya hazırlanmak için çağrılır.
SceneWillEnterForeground UIKit.UIScene Bir sahne ön planda çalışmak üzereyken çağrılır ve kullanıcı tarafından görülebilir hale gelir.
WillEnterForeground UIKit.UIApplication Uygulama arka planlı bir durumdan geri dönecekse çağrılır.
WillFinishLaunching UIKit.UIApplication, Foundation.NSDictionary Uygulama başlatma işlemi başladığında çağrılır, ancak durum geri yükleme işlemi henüz gerçekleşmemiştir.
WillTerminate UIKit.UIApplication Uygulama bellek kısıtlamaları nedeniyle veya doğrudan kullanıcı tarafından sonlandırılıyorsa çağrılır.
WindowSceneDidUpdateCoordinateSpace UIKit.UIWindowScene, UIKit.IUICoordinateSpace, UIKit.UIInterfaceOrientation, UIKit.UITraitCollection Bir sahnenin boyutu, yönü veya özellikleri değiştiğinde çağrılır.

Önemli

dışında PerformFetchher temsilcinin, temsilci için bir işleyici kaydetmek üzere çağrılabilen, karşılık gelen aynı adlı bir uzantı yöntemi vardır.

Çağrılan bir iOS yaşam döngüsü temsilcisine yanıt vermek için sınıfınızın yöntemindeki MauiAppBuilder nesnede CreateMauiapp yöntemini çağırınConfigureLifecycleEvents.MauiProgram Ardından nesnesinde ILifecycleBuilder yöntemini çağırın AddiOS ve gerekli temsilciler için işleyicileri kaydeden öğesini belirtin Action :

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

iOS uygulama yaşam döngüsü hakkında daha fazla bilgi için bkz . developer.apple.com'de Uygulamanızın Yaşam Döngüsünü Yönetme.

Windows

Aşağıdaki tabloda, tetiklenen Windows yaşam döngüsü olaylarına yanıt olarak çağrılan .NET MAUI temsilcileri listelenmektedir:

Temsilci Bağımsız Değişkenler Açıklama
OnActivated Microsoft.UI.Xaml.Window, Microsoft.UI.Xaml.WindowActivatedEventArgs Uygulama devam ettirmiyorsa platform Activated olayı tetiklendiğinde çağrılır.
OnClosed Microsoft.UI.Xaml.Window, Microsoft.UI.Xaml.WindowEventArgs Platform Closed olayı tetiklendiğinde çağrılır.
OnLaunched Microsoft.UI.Xaml.Window, Microsoft.UI.Xaml.LaunchActivatedEventArgs Yerel pencere oluşturulup etkinleştirildikten sonra .NET MAUI'nin Application.OnLaunched geçersiz kılması tarafından çağrılır.
OnLaunching Microsoft.UI.Xaml.Window, Microsoft.UI.Xaml.LaunchActivatedEventArgs Yerel pencere oluşturulmadan ve etkinleştirilmeden önce .NET MAUI'nin Application.OnLaunched geçersiz kılması tarafından çağrılır.
OnPlatformMessage Microsoft.UI.Xaml.Window, WindowsPlatformMessageEventArgs .NET MAUI belirli yerel Windows iletilerini aldığında çağrılır.
OnPlatformWindowSubclassed Microsoft.UI.Xaml.Window, WindowsPlatformWindowSubclassedEventArgs Win32 penceresi alt sınıflandığında .NET MAUI tarafından çağrılır.
OnResumed Microsoft.UI.Xaml.Window Uygulama devam ettiriliyorsa platform Activated olayı tetiklendiğinde çağrılır.
OnVisibilityChanged Microsoft.UI.Xaml.Window, Microsoft.UI.Xaml.WindowVisibilityChangedEventArgs Platform VisibilityChanged olayı tetiklendiğinde çağrılır.
OnWindowCreated Microsoft.UI.Xaml.Window Platformlar Windowarası için yerel pencere oluşturulduğunda çağrılır.

.NET MAUI, temsilciyle belirli OnPlatformMessage yerel Windows iletilerini yaşam döngüsü olayı olarak kullanıma sunar. Bu WindowsPlatformMessageEventArgs temsilciye eşlik eden nesne türünde uintbir MessageId özellik içerir. Uygulama pencerenize hangi iletinin geçirildiğini belirlemek için bu özelliğin değeri incelenebilir. Windows iletileri hakkında daha fazla bilgi için bkz . Windows İletileri (Win32 ve C++'ı Kullanmaya Başlama). Pencere iletisi sabitlerinin listesi için bkz . Pencere bildirimleri.

Önemli

Her temsilci, temsilci için bir işleyici kaydetmek üzere çağrılabilen, karşılık gelen aynı adlı bir uzantı yöntemine sahiptir.

Çağrılan bir Windows yaşam döngüsü temsilcisine yanıt vermek için sınıfınızın yöntemindeki MauiAppBuilder nesnede CreateMauiApp yöntemini çağırınConfigureLifecycleEvents.MauiProgram Ardından nesnesinde ILifecycleBuilder yöntemini çağırın AddWindows ve gerekli temsilciler için işleyicileri kaydeden öğesini belirtin Action :

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

Window nesnesini alma

Platform kodu, uzantı yöntemiyle GetWindow uygulamanın Window nesnesini platform yaşam döngüsü olaylarından alabilir:

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

Özel yaşam döngüsü olayları

.NET MAUI, tetiklenen platform yaşam döngüsü olaylarına yanıt olarak çağrılan temsilcileri tanımlasa da, yalnızca ortak bir platform yaşam döngüsü olayları kümesini kullanıma sunar. Ancak, genellikle kitaplık yazarları için ek platform yaşam döngüsü olayları oluşturulduğunda uygulamaların bilgilendirilmesini sağlayan bir mekanizma da içerir. Bunu gerçekleştirme işlemi aşağıdaki gibidir:

  • .NET MAUI tarafından sunulmayan bir platform yaşam döngüsü olayı için olay işleyicisi kaydedin.
  • Platform yaşam döngüsü olayının olay işleyicisinde örneği alın ILifecycleEventService ve platform olay adını bağımsız değişkeni olarak belirterek yöntemini çağırın InvokeEvents .

Ardından, platform yaşam döngüsü olayının bildirimini almak isteyen uygulamalar, sınıfının CreateMauiAppMauiProgram yöntemini nesnesinde MauiAppBuilder yöntemini çağıracak ConfigureLifecycleEvents şekilde değiştirmelidir. Ardından nesnesinde ILifecycleBuilder yöntemini çağırın AddEvent ve platform olayı adını ve Action platform olayı tetiklendiğinde çağrılacak olan öğesini belirtin.

Örnek

WinUI 3 Window.SizeChanged olayı, yerel uygulama penceresi ilk kez işlendiğinde veya işleme boyutunu değiştirdiğinde gerçekleşir. .NET MAUI, bu platform olayını yaşam döngüsü olayı olarak kullanıma sunmaz. Ancak uygulamalar, bu platform olayı tetiklendiğinde aşağıdaki yaklaşımı kullanarak bildirim alabilir:

  • Platform yaşam döngüsü olayı için bir olay işleyicisi Window.SizeChanged kaydedin:

    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();
    }    
    
  • Platform yaşam döngüsü olayının olay işleyicisinde örneği alın ILifecycleEventService ve platform olay adını bağımsız değişkeni olarak belirterek yöntemini çağırın InvokeEvents :

    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
    

    Windows'daki MauiWinUIApplication tür, özelliği aracılığıyla Current yerel uygulama örneğine erişmek için kullanılabilir. Android'de MauiApplication türü yerel uygulama örneğine erişmek için kullanılabilir. Benzer şekilde, MauiUIApplicationDelegate iOS'ta türü yerel uygulama örneğine erişmek için kullanılabilir.

    Uyarı

    yöntemiyle InvokeEvents kaydedilmemiş bir olayı çağırmak bir özel durum oluşturmaz.

  • CreateMauiApp sınıfınızın MauiProgram yönteminde nesnesini çağırın ConfigureLifecycleEventsMauiAppBuilder. Ardından nesnesinde ILifecycleBuilder yöntemini çağırın AddEvent ve platform olay adını ve Action platform olayı tetiklendiğinde çağrılacak olan öğesini belirtin:

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

Bunun genel etkisi, bir kullanıcı Windows'ta uygulama penceresi boyutunu değiştirdiğinde yönteminde belirtilen eylemin AddEvent yürütülmesidir.

Dekont

Yöntemi ayrıca AddEvent bir temsilcinin belirtilmesine olanak tanıyan bir aşırı yüklemeye sahiptir.