Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Desktopové aplikace vytvořené pomocí Windows App SDK běží nepřetržitě, i když uživatel přepne do jiné aplikace. Tento článek vysvětluje, jak funguje spouštění na pozadí, a doporučuje osvědčené postupy pro zajištění efektivity.
Important
Desktopové aplikace nejsou systémem automaticky pozastavené nebo ukončené způsobem , jakým jsou aplikace pro UPW. Aplikace pokračuje v běhu, dokud ji uživatel nezavře nebo se proces neukončí. K neomezenému spuštění nejsou nutná žádná speciální rozhraní API ani omezené možnosti. Pomocí systémových oznámení paměti můžete v případě potřeby reagovat na tlak na prostředky.
Desktopové aplikace běží nativně na pozadí.
V UWP vyžadoval neomezený běh na pozadí omezenou schopnost extendedBackgroundTaskTime a podnikové nasazení. Desktopové aplikace toto omezení nemají. Vlákna vaší aplikace se budou dál spouštět, časovače se pořád spouštějí a síťová připojení zůstanou otevřená bez ohledu na to, jestli je vaše okno viditelné.
To znamená, že můžete:
- Udržujte trvalá připojení k serverům (například chatovací aplikace, monitorování v reálném čase).
- Spusťte dlouhé výpočty (například kódování videa, analýza dat).
- Hlasování o aktualizacích podle plánu
- Přehrajte zvuk a aktualizujte ovládací prvky médií.
Osvědčené postupy pro efektivitu baterie
Přestože desktopové aplikace mohou běžet bez omezení, ohleduplné chování na zařízeních napájených z baterie zlepšuje uživatelský komfort. Systém může označit vaši aplikaci jako náročný příjemce prostředků, pokud používá nadměrné využití procesoru nebo sítě na pozadí.
Omezení práce v případech, kdy není okno viditelné
// 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);
}
};
Používejte vzory s ohledem na spotřebu energie
- Snižte frekvenci časovače – přepněte z intervalů kratších než jedna sekunda na vícesekundové intervaly, když je aplikace na pozadí.
- Pozastavte nepodstatné vykreslování – Zastavte animace, činnost GPU a aktualizace obrazovky.
- Dávkové síťové požadavky — Zkombinujte více požadavků do menšího počtu větších.
- Respektujte spořič baterie – Zkontrolujte PowerManager.BatteryStatus a omezte práci, když je zařízení na baterii.
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;
}
}
Použití úloh na pozadí pro práci řízenou událostmi
Pokud vaše aplikace potřebuje reagovat na systémové události (například časovač, nabízená oznámení nebo změna sítě), aniž by běžela nepřetržitě, zvažte místo toho použití úlohy na pozadí:
var builder = new BackgroundTaskBuilder
{
Name = "PeriodicSync",
TaskEntryPoint = "MyApp.Background.SyncTask"
};
builder.SetTrigger(new TimeTrigger(15, false));
builder.Register();
Note
Úlohy na pozadí vyžadují identitu balíčku MSIX pro registraci. Pokud je vaše aplikace rozbalená, použijte místo toho časovače v procesu nebo naplánované úlohy.
Prodloužený běh pro kritické úlohy
Pokud máte práci, která by neměla být přerušena řízením spotřeby (například uložením velkého souboru), použijte rozšířenou relaci provádění. To signalizuje systém, že vaše práce je důležitá, a to i na zařízeních s bateriemi.
Porovnání se spouštěním na pozadí UWP
| funkce | UPW | Stolní počítač |
|---|---|---|
| Aplikace běží na pozadí | Pouze s úlohami na pozadí nebo omezenými možnostmi | Vždy |
| Vyžaduje deklaraci schopností. | Ano (extendedBackgroundTaskTime) |
Ne |
| Systém se ukončí kvůli úspoře prostředků. | Ano | Ne |
| Omezení výkonu v režimu úspory baterie | Systém vynucuje omezení | Aplikace by měla samoregulovat |
| Úlohy na pozadí pro práci řízenou událostmi | Primární mechanismus | Volitelný doplněk |
Související obsah
Windows developer