Bakgrundskörning i Windows App SDK skrivbordsappar

Skrivbordsappar som skapats med Windows App SDK köras kontinuerligt, även när användaren växlar till en annan app. Den här artikeln förklarar hur bakgrundskörning fungerar och rekommenderar metodtips för effektivitet.

Important

Skrivbordsappar pausas eller avslutas inte automatiskt av systemet på samma sätt som UWP-appar. Appen fortsätter att köras tills användaren stänger den eller processen avslutas. Inga särskilda API:er eller begränsade funktioner krävs för att köras på obestämd tid. Använd meddelanden om systemminne för att svara på resursbelastning när det är lämpligt.

Skrivbordsappar körs i bakgrunden internt

I UWP krävdes den begränsade funktionen extendedBackgroundTaskTime och företagsdistribution för att köras i bakgrunden på obestämd tid. Skrivbordsappar har inte den här begränsningen. Appens trådar fortsätter att köras, timers fortsätter att utlösas och nätverksanslutningarna förblir öppna oavsett om fönstret är synligt.

Det innebär att du kan:

  • Underhålla beständiga anslutningar till servrar (till exempel chattappar, realtidsövervakning).
  • Kör långa beräkningar (till exempel videokodning, dataanalys).
  • Sök efter uppdateringar enligt ett schema.
  • Spela upp ljud och uppdatera mediekontroller.

Metodtips för batterieffektivitet

Även om skrivbordsappar kan köras utan begränsning förbättrar användarupplevelsen att vara en bra medborgare på batteridrivna enheter. Systemet kan flagga din app som en tung resurskonsument om den använder för mycket processor eller nätverk i bakgrunden.

Minska arbetet när fönstret inte visas

// m_window is your app's main Window; _updateTimer is a DispatcherTimer field.
Microsoft.UI.Xaml.Window m_window = this;
Microsoft.UI.Xaml.DispatcherTimer _updateTimer = new();

m_window.Activated += (sender, args) =>
{
    if (args.WindowActivationState == WindowActivationState.Deactivated)
    {
        // Window lost focus — slow down background processing
        _updateTimer.Interval = TimeSpan.FromSeconds(30);
    }
    else
    {
        // Window is active — resume full-speed processing
        _updateTimer.Interval = TimeSpan.FromSeconds(1);
    }
};

Använda energimedvetna mönster

  • Minska timerfrekvensen – Växla från under sekund till flera sekunders intervall när appen finns i bakgrunden.
  • Pausa icke-nödvändig återgivning – Stoppa animeringar, GPU-arbete och skärmuppdateringar.
  • Batch-nätverksbegäranden – Kombinera flera begäranden till färre, större.
  • Respektera batterisparfunktionen – Kontrollera PowerManager.BatteryStatus och minska arbetet när enheten är batteriladdad.
using Windows.System.Power;

private bool _enableBackgroundSync = true;

private void CheckPowerState()
{
    if (PowerManager.BatteryStatus == BatteryStatus.Discharging &&
        PowerManager.RemainingChargePercent < 20)
    {
        // Reduce background work significantly
        _enableBackgroundSync = false;
    }
}

Använd bakgrundsaktiviteter för händelsestyrt arbete

Om din app behöver svara på systemhändelser (till exempel en timer, push-meddelande eller nätverksändring) utan att köras kontinuerligt kan du överväga att använda en bakgrundsaktivitet i stället:

var builder = new BackgroundTaskBuilder
{
    Name = "PeriodicSync",
    TaskEntryPoint = "MyApp.Background.SyncTask"
};
builder.SetTrigger(new TimeTrigger(15, false));
builder.Register();

Note

Bakgrundsaktiviteter kräver MSIX-paketidentitet för registrering. Om din app inte är paketerad använder du i stället interna timers eller schemalagda uppgifter.

Utökad exekvering för kritiskt arbete

Om du har arbete som inte bör avbrytas av energihantering (till exempel när du sparar en stor fil) ska du använda en utökad körningssession. Detta signalerar till systemet att ditt arbete är viktigt, även på batteridrivna enheter.

Jämförelse med UWP-bakgrundskörning

Feature UWP Desktop
Appen körs i bakgrunden Endast med bakgrundsaktiviteter eller begränsade funktioner Alltid
Kräver kapacitetsdeklaration Ja (extendedBackgroundTaskTime) No
Systemet avslutas för att spara resurser Yes No
Strypning i batterisparläge Systemet tillämpar begränsningar Appen bör regleras själv
Bakgrundsaktiviteter för händelsedrivet arbete Primär mekanism Valfritt komplement