Použití rozšířeného spouštění v desktopových aplikacích Windows App SDK

Relace rozšířeného spuštění umožňují vaší aplikaci požádat systém, aby ji v určitých scénářích ponechal spuštěnou, i když by jinak mohla být kvůli úspoře prostředků na bateriově napájených zařízeních omezena. Desktopové aplikace sice nejsou automaticky pozastavené, ale rozšířené spouštění je stále užitečné pro signalizaci záměru systému.

Important

Desktopové aplikace nadále běží bez ohledu na to, jestli používají rozšířené spouštění. Hlavní výhodou ExtendedExecutionSession v desktopové aplikaci je sdělit systému, že vaše práce je důležitá a neměla by být přerušována funkcemi pro úsporu energie, jako jsou Modern Standby nebo režim úspory baterie.

Kdy použít rozšířené spuštění

Rozšířené relace provádění jsou nejužitečnější v desktopových aplikacích pro:

  • Ukládání důležitých dat – Zajištění dokončení velké operace ukládání před vstupem zařízení do úsporného režimu.
  • Sledování polohy – Udržování toku dat GPS v době, kdy je aplikace minimalizovaná na přenosném počítači.
  • Dlouhotrvající výpočty – dokončení úlohy vykreslování, kompilace nebo analýzy dat

Ve scénářích, kdy vaše desktopová aplikace jednoduše potřebuje běžet (například chatovací aplikace nebo hudební přehrávač), nepotřebujete rozšířené spouštění – aplikace stále normálně běží.

Vytvořte rozšířenou relaci spuštění

Použijte třídu ExtendedExecutionSession:

using Windows.ApplicationModel.ExtendedExecution;

private ExtendedExecutionSession? _session;

private async Task StartExtendedSessionAsync()
{
    var session = new ExtendedExecutionSession
    {
        Reason = ExtendedExecutionReason.Unspecified,
        Description = "Completing critical data save"
    };

    session.Revoked += ExtendedSession_Revoked;

    ExtendedExecutionResult result = await session.RequestExtensionAsync();

    if (result == ExtendedExecutionResult.Allowed)
    {
        _session = session;
        // Proceed with the long-running work
    }
    else
    {
        session.Dispose();
        // The system denied the request — handle gracefully
    }
}

private void ExtendedSession_Revoked(object sender,
    ExtendedExecutionRevokedEventArgs args)
{
    // The session was revoked. Save state quickly.
    if (args.Reason == ExtendedExecutionRevokedReason.SystemPolicy)
    {
        // System needs resources — wrap up immediately
    }
}

Důvody rozšířeného provádění

Reason Případ použití
SavingData Aplikace musí dokončit operaci uložení.
LocationTracking Vaše aplikace sleduje polohu uživatele.
Unspecified Další dlouhotrvající práce

Note

LocationTracking vyžaduje oprávnění location v manifestu aplikace a souhlas uživatele.

Ukončení relace

Po dokončení práce zrušte relaci, aby se uvolnil požadavek:

private ExtendedExecutionSession? _session;

private void ExtendedSession_Revoked(object sender,
    ExtendedExecutionRevokedEventArgs args)
{
}

private void StopExtendedSession()
{
    if (_session != null)
    {
        _session.Revoked -= ExtendedSession_Revoked;
        _session.Dispose();
        _session = null;
    }
}

Rozdíly od UPW

Chování UPW Stolní počítač
Purpose Zabraňuje pozastavení Signály důležitosti pro řízení spotřeby
Aplikace bez ní zůstane spuštěná. Ne — aplikace UWP se pozastaví Ano – desktopové aplikace běží normálně
Zneplatnění relace Může způsobit pozastavení Nezastaví aplikaci, ale úspora energie se může uplatnit
SavingData Důvod Zabraňuje pozastavení během ukládání. Stejné rozhraní API, méně důležité, protože aplikace není pozastavená

Osvědčené postupy

  • Vyžadujte rozšířené spuštění pouze tehdy, když máte konkrétní úlohu, která by neměla být přerušena kvůli úspoře energie.
  • Vždy zpracujte událost Revoked, i v desktopových aplikacích.
  • Jakmile dokončíte práci, ukončete relaci.
  • Nenechávejte prodlouženou relaci spuštěnou neomezeně dlouho – může to ovlivnit výdrž baterie zařízení.