Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
I den här artikeln beskrivs livscykeln för en Windows App SDK skrivbordsapp från start till avslutning. Genom att förstå livscykeln kan du hantera tillstånd, spara resurser och ge en smidig användarupplevelse.
Important
Till skillnad från UWP-appar omfattas inte skrivbordsappar (inklusive WinUI 3) av UWP-modellen för livscykelhantering (PLM) för automatisk avstängning och avslutning i bakgrunden. De fortsätter att köras tills användaren stänger dem eller processen avslutas. En paketerad skrivbordsapp omfattas dock fortfarande av systemomfattande energi- och resursprinciper – till exempel kan modernt vänteläge pausa alla processer i användarläge (inklusive din app) när enheten är i strömsparläge, och Windows kan använda Effektivitetsläge (EcoQoS) för att begränsa PROCESSORprioritet och tjänstkvalitet för bakgrundsappar eller minimerade appar. Appen bör fortfarande hantera oväntade avstängningar på ett korrekt sätt (till exempel strömavbrott, OS-uppdateringar eller användaren som avslutar processen via Aktivitetshanteraren) och bör inte anta att den alltid har processoråtkomst med full hastighet i bakgrunden.
Livscykelöversikt
En Windows App SDK skrivbordsapp har en enklare livscykel än UWP:
| Tillstånd | Description |
|---|---|
| Körs inte | Appprocessen har inte startats. |
| Kör | Appen är aktiv. Det kanske eller kanske inte har ett synligt fönster. |
| Stängt | Användaren (eller systemet) avslutade processen. |
Eftersom det inte finns något pausat tillstånd behöver du inte hantera Suspending eller Resuming händelser som UWP-appar gör. Fokusera i stället på:
- Sparar användartillstånd när fönstret stängs eller appen stängs av.
- Hantera aktivering (start, fil, protokoll eller andra aktiveringstyper).
- Hantera bakgrundsarbete effektivt för att spara batteri på bärbara enheter.
Start av app
När en användare startar din app Microsoft. UI. Xaml.Application.OnLaunched-metoden körs. Använd det för att initiera huvudfönstret och navigera till din första sida.
public partial class App : Microsoft.UI.Xaml.Application
{
private Microsoft.UI.Xaml.Window? m_window;
protected override void OnLaunched(Microsoft.UI.Xaml.LaunchActivatedEventArgs args)
{
m_window = new MainWindow();
m_window.Activate();
}
}
// MainWindow is the window class generated by the WinUI 3 project
// template (MainWindow.xaml / MainWindow.xaml.cs).
public partial class MainWindow : Microsoft.UI.Xaml.Window
{
}
Note
Windows App SDK skrivbordsappar får inte något PreviousExecutionState värde från systemet. Om du behöver återställa tillstånd efter en krasch eller oväntad avslutning, implementerar du en egen mekanism för att bevara tillståndet (du kan till exempel spara tillståndet i en lokal fil med jämna mellanrum eller när viktiga åtgärder har slutförts).
Aktivering av app
Windows App SDK ger omfattande aktiveringsstöd via Microsoft.Windows. AppLifecycle-namnområde. Appen kan aktiveras genom att:
- Standardstart – Användaren väljer din appikon.
- Filaktivering – Användaren öppnar en filtyp som är associerad med din app.
- Protokollaktivering – Ett URI-schema som är registrerat i din app anropas.
- Startaktivering – Appen registreras för att starta vid användarinloggning.
- Övrigt — toast-meddelande, delningsmål och ytterligare aktiveringstyper.
Använd AppInstance.GetActivatedEventArgs för att fastställa aktiveringstyp:
using Microsoft.Windows.AppLifecycle;
var activatedArgs = AppInstance.GetCurrent().GetActivatedEventArgs();
switch (activatedArgs.Kind)
{
case ExtendedActivationKind.File:
var fileArgs = activatedArgs.Data as
Windows.ApplicationModel.Activation.IFileActivatedEventArgs;
// Handle the file
break;
case ExtendedActivationKind.Protocol:
var protocolArgs = activatedArgs.Data as
Windows.ApplicationModel.Activation.IProtocolActivatedEventArgs;
// Handle the URI
break;
case ExtendedActivationKind.Launch:
default:
// Standard launch
break;
}
Paketerade appar registreras för fil- och protokollaktivering via Package.appxmanifest. Opaketerade appar har inget manifest, så de registrerar samma aktiveringstyper i kod med Microsoft.Windows.AppLifecycle.ActivationRegistrationManager. En detaljerad genomgång av båda metoderna finns i Appaktivering för Windows App SDK.
Körs i bakgrunden och förgrunden
Skrivbordsappar fortsätter att köra oavsett om de är i förgrunden eller inte. Systemet stoppar inte trådarna eller återtar minnet när användaren växlar till en annan app. Du kan dock fortfarande svara på synlighetsändringar för att optimera resursanvändningen:
- Frigör dyra GPU-resurser eller återgivningsresurser när fönstret minimeras.
- Pausa animeringar eller medieförhandsvisning när fönstret tappar fokus.
- Minska timerfrekvensen för bakgrundspollning.
Microsoft.UI.Xaml.Window exponerar inte en VisibilityChanged-händelse. Använd Window.Activated i stället händelsen för att identifiera när ditt fönster ökar eller förlorar fokus eller använder AppWindow.Changed för att identifiera ändringar i presentatörstillstånd (till exempel minimerat eller återställt):
// m_window is the field declared on your App type (see "App launch" above).
Microsoft.UI.Xaml.Window m_window = this;
m_window.Activated += (sender, args) =>
{
if (args.WindowActivationState == WindowActivationState.Deactivated)
{
// Window lost focus — consider reducing work,
// for example pausing animations or media preview
}
else
{
// Window is active — resume normal work
}
};
// To specifically detect minimize/restore, use AppWindow.Changed
var appWindow = m_window.AppWindow;
appWindow.Changed += (sender, args) =>
{
if (args.DidPresenterChange)
{
if (sender.Presenter is OverlappedPresenter presenter &&
presenter.State == OverlappedPresenterState.Minimized)
{
// Window is minimized — pause expensive rendering
}
else
{
// Window is restored — resume rendering
}
}
};
Tip
På batteridrivna enheter förbättras batteritiden och systemets respons om du minskar bakgrundsarbete när appen inte är synlig, även om systemet inte framtvingar pausning.
Sparar tillstånd
Eftersom skrivbordsappar inte pausas styr du när tillståndet ska sparas. Rekommenderade metoder:
-
Vid fönsterstängning – Hantera
Window.Closedhändelsen för att spara data. - Periodisk sparande – Använd en timer för att spara tillstånd med intervall (till exempel var 60:e sekund).
- Vid viktiga åtgärder – Spara när användaren har slutfört en betydande åtgärd (till exempel när en redigering har slutförts).
// m_window is the field declared on your App type (see "App launch" above).
Microsoft.UI.Xaml.Window m_window = this;
m_window.Closed += (sender, args) =>
{
SaveApplicationState();
};
// Replace with your own logic to persist app state.
void SaveApplicationState() { }
Stäng och avsluta appen
En skrivbordsapp avslutas när:
- Användaren stänger det sista fönstret.
- Koden anropar
Application.Current.Exit(). - Processen avslutas externt (Aktivitetshanteraren, systemavstängning).
Det finns inget tillstånd "avslutat av systemet för att frigöra resurser" som i UWP. Din app körs tills den uttryckligen avslutas.
Note
Om din app kraschar startas den om från början. Implementera periodisk tillståndsbesparing för att minimera dataförlust.
Skillnader från UWP-appens livscykel
| Behavior | UWP | Windows App SDK (Desktop) |
|---|---|---|
| Automatisk fjädring (PLM) | Ja – efter några sekunder i bakgrunden | Nej – men hela enheten kan fortfarande ange modernt vänteläge |
| Systemavslutning för att frigöra minne | Ja – pausade appar kan avslutas | No |
Suspending
/
Resuming händelser |
Yes | Ej tillämpligt |
| Förlansering | Ja (anmäl dig) | No |
| Bakgrundstillstånd framtvingat | Yes | Nej – men Effektivitetsläge (EcoQoS) kan begränsa bakgrundsappar |
| Återställning av tillstånd efter avslut | Krävs för bra UX | Valfritt – implementera egna |
Relaterat innehåll
Windows developer