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:
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 Created
Activated
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ğindeCreated
çağrılır.OnActivated
, olay tetiklendiğindeActivated
çağrılır.OnDeactivated
, olay tetiklendiğindeDeactivated
çağrılır.OnStopped
, olay tetiklendiğindeStopped
çağrılır.OnResumed
, olay tetiklendiğindeResumed
çağrılır.OnDestroying
, olay tetiklendiğindeDestroying
çağrılır.OnBackgrounding
, olay tetiklendiğindeBackgrounding
ç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
}
}
}
-Window
derived 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 , OnRestart veya OnPause öğesinden sonra OnRestoreInstanceState çağrılır. |
|
OnSaveInstanceState |
Android.App.Activity , Android.OS.Bundle |
Durumun veya OnRestoreInstanceState iç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 PerformFetch
her 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 Window arası 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 uint
bir 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ınInvokeEvents
.
Ardından, platform yaşam döngüsü olayının bildirimini almak isteyen uygulamalar, sınıfının CreateMauiApp
MauiProgram
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ınInvokeEvents
: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ığıylaCurrent
yerel uygulama örneğine erişmek için kullanılabilir. Android'deMauiApplication
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ınMauiProgram
yönteminde nesnesini çağırınConfigureLifecycleEvents
MauiAppBuilder
. Ardından nesnesindeILifecycleBuilder
yöntemini çağırınAddEvent
ve platform olay adını veAction
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.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin