Kiterjesztett végrehajtás használata Windows App SDK asztali alkalmazásokban

A kiterjesztett végrehajtási munkamenetek lehetővé teszik az alkalmazás számára, hogy kérje, hogy a rendszer futtasson bizonyos helyzetekben, még akkor is, ha egyébként erőforrás-csökkentésre lenne alkalmas az akkumulátorral működő eszközökön. Bár az asztali alkalmazások nincsenek automatikusan felfüggesztve, a kiterjesztett végrehajtás továbbra is hasznos a rendszer felé irányuló szándék jelzéséhez.

Important

Az asztali alkalmazások továbbra is futnak, függetlenül attól, hogy kiterjesztett végrehajtást használnak-e. A ExtendedExecutionSession elsődleges előnye asztali alkalmazásokban az, hogy jelzi a rendszernek: az Ön munkája fontos, ezért azt nem szakíthatják meg az olyan energiatakarékossági funkciók, mint a Modern Standby vagy az akkumulátorkímélő.

Mikor érdemes kiterjesztett végrehajtást használni?

A kiterjesztett végrehajtási munkamenetek a leginkább hasznosak az asztali alkalmazásokban a következőkhöz:

  • Kritikus adatok mentése – Annak biztosítása, hogy egy nagy mentési művelet befejeződjön, mielőtt az eszköz készenléti állapotba lép.
  • Helykövetés – A GPS-adatok folyamatos áramlása, miközben az alkalmazás minimálisra csökken egy laptopon.
  • Hosszú ideig futó számítások – Renderelési, fordítási vagy adatelemzési feladatok elvégzése.

Olyan helyzetekben, amikor az asztali alkalmazásnak egyszerűen tovább kell futnia (például csevegőalkalmazást vagy zenelejátszót), nincs szükség kiterjesztett végrehajtásra – az alkalmazás továbbra is a szokásos módon fut.

Kiterjesztett végrehajtási munkamenet létrehozása

Használja az ExtendedExecutionSession osztályt :

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
    }
}

A kiterjesztett végrehajtás okai

Reason Felhasználási eset
SavingData Az alkalmazásnak végre kell hajtania egy mentési műveletet
LocationTracking Az alkalmazás nyomon követi a felhasználó tartózkodási helyét
Unspecified Egyéb hosszú ideig futó munka

Note

A(z) LocationTracking használatához az alkalmazás jegyzékében megadott location képességre és a felhasználó hozzájárulására van szükség.

A munkamenet befejezése

Amikor a feladat befejeződik, a kérés felszabadításához szüntesse meg a munkamenetet:

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;
    }
}

Különbségek az UWP-től

Magatartás UWP Munkaasztal
Alkalmazás célja Megakadályozza a felfüggesztést Jelzi a fontosságot az energiagazdálkodás számára
Az alkalmazás továbbra is fut nélküle Nem – Az UWP-alkalmazások felfüggesztése Igen – az asztali alkalmazások normál módon futnak
Munkamenet visszavonása Felfüggesztést okozhat Nem állítja le az alkalmazást, de energiatakarékosságra lehet szükség
SavingData Ok Megakadályozza a mentés közbeni felfüggesztést Ugyanaz az API, kevésbé kritikus, mivel az alkalmazás nem függeszt fel

Bevált gyakorlatok

  • Csak akkor kérje a kiterjesztett végrehajtást, ha olyan konkrét munkával rendelkezik, amelyet nem szabad megszakítani az energiatakarékosság miatt.
  • Mindig kezelje az eseményt Revoked , még asztali alkalmazásokban is.
  • Amint befejezte a munkát, azonnal szüntesse meg a munkamenetet.
  • Ne tartson hosszabb munkamenetet határozatlan ideig – ez hatással lehet az eszköz akkumulátorának üzemidejére.