Uso de la ejecución extendida en aplicaciones de escritorio de SDK de Aplicaciones para Windows

Las sesiones de ejecución extendidas permiten a la aplicación solicitar que el sistema lo mantenga en ejecución para escenarios específicos, incluso cuando de otro modo sería candidato para la reducción de recursos en dispositivos con batería. Aunque las aplicaciones de escritorio no se suspenden automáticamente, la ejecución extendida sigue siendo útil para indicar la intención al sistema.

Importante

Las aplicaciones de escritorio siguen ejecutándose tanto si usan la ejecución extendida como si no. La principal ventaja de ExtendedExecutionSession en una aplicación de escritorio es indicar al sistema que tu trabajo es importante y que no debe verse interrumpido por medidas de ahorro de energía, como Modern Standby o el ahorro de batería.

Cuándo usar la ejecución extendida

Las sesiones de ejecución extendidas son más útiles en las aplicaciones de escritorio para:

  • Guardar datos críticos : garantiza que se complete una operación de guardado grande antes de que el dispositivo entre en espera.
  • Seguimiento de ubicación : mantener los datos GPS fluyendo mientras la aplicación está minimizada en un portátil.
  • Cálculos de larga duración : finalización de una tarea de representación, compilación o análisis de datos.

En escenarios en los que la aplicación de escritorio simplemente necesita seguir ejecutándose (por ejemplo, una aplicación de chat o reproductor de música), no necesita una ejecución extendida; la aplicación continúa ejecutándose normalmente.

Creación de una sesión de ejecución extendida

Use la clase 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
    }
}

Razones de ejecución prolongada

Reason Caso de uso
SavingData La aplicación debe completar una operación de guardado
LocationTracking La aplicación realiza el seguimiento de la ubicación del usuario.
Unspecified Otro trabajo de larga duración

Note

LocationTracking requiere la capacidad location en el manifiesto de la aplicación y el consentimiento del usuario.

Finalizar la sesión

Cuando finalice el trabajo, elimine la sesión para liberar la solicitud:

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

Diferencias con respecto a UWP

Comportamiento UWP Escritorio
propósito Impide la suspensión Importancia de las señales en la gestión de energía
La aplicación sigue ejecutándose sin ella No: las aplicaciones para UWP se suspenden Sí: las aplicaciones de escritorio se ejecutan normalmente
Revocación de sesión Puede provocar suspensión No detiene la aplicación, pero es posible que se apliquen ahorros de energía.
SavingData motivo Impide la suspensión durante el guardado La misma API, menos crítica, ya que la aplicación no se suspende

Prácticas recomendadas

  • Solo solicite la ejecución extendida cuando tenga un trabajo específico que no debe interrumpirse mediante el ahorro de energía.
  • Controle siempre el Revoked evento, incluso en las aplicaciones de escritorio.
  • Elimine la sesión tan pronto como finalice el trabajo.
  • No mantenga una sesión extendida indefinidamente, puede afectar a la duración de la batería del dispositivo.