Ejecución en segundo plano en aplicaciones de escritorio de SDK de Aplicaciones para Windows

Las aplicaciones de escritorio creadas con el SDK de Aplicaciones para Windows se ejecutan continuamente, incluso cuando el usuario cambia a otra aplicación. En este artículo se explica cómo funciona la ejecución en segundo plano y se recomiendan los procedimientos recomendados para la eficacia.

Importante

Las aplicaciones de escritorio no se suspenden ni finalizan automáticamente por el sistema de la forma en que las aplicaciones para UWP son. La aplicación continúa ejecutándose hasta que el usuario la cierra o el proceso se cierra. No se requieren API especiales ni funcionalidades restringidas para ejecutarse indefinidamente. Use notificaciones de memoria del sistema para responder a la presión de los recursos cuando corresponda.

Las aplicaciones de escritorio se ejecutan en segundo plano de forma nativa

En UWP, la ejecución indefinida en segundo plano requería la capacidad restringida extendedBackgroundTaskTime y la implementación en entornos empresariales. Las aplicaciones de escritorio no tienen esta restricción. Los subprocesos de la aplicación continúan ejecutándose, los temporizadores siguen activando y las conexiones de red permanecen abiertas independientemente de si la ventana está visible.

Esto significa que puede:

  • Mantener conexiones persistentes a servidores (por ejemplo, aplicaciones de chat, supervisión en tiempo real).
  • Ejecute cálculos largos (por ejemplo, codificación de vídeo, análisis de datos).
  • Sondee las actualizaciones según una programación.
  • Reproducir audio y actualizar los controles multimedia.

Procedimientos recomendados para la eficiencia de la batería

Aunque las aplicaciones de escritorio se pueden ejecutar sin restricciones, ser un buen ciudadano en dispositivos con batería mejora la experiencia del usuario. El sistema puede marcar la aplicación como consumidor de recursos pesados si usa una CPU o red excesivas en segundo plano.

Reducir el trabajo cuando la ventana no está visible

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

Utilice patrones que tengan en cuenta el consumo energético

  • Reducir la frecuencia del temporizador : cambie de intervalos de sub-segundo a varios segundos cuando la aplicación esté en segundo plano.
  • Pausar la representación no esencial : detenga las animaciones, el trabajo de GPU y las actualizaciones de pantalla.
  • Procesamiento por lotes de solicitudes de red — Combinar varias solicitudes en un número menor de solicitudes más grandes.
  • Respetar el ahorro de batería : compruebe PowerManager.BatteryStatus y reduzca el trabajo cuando el dispositivo esté en batería.
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;
    }
}

Uso de tareas en segundo plano para el trabajo controlado por eventos

Si la aplicación necesita responder a eventos del sistema (como un temporizador, una notificación de inserción o un cambio de red) sin ejecutarse continuamente, considere la posibilidad de usar una tarea en segundo plano en su lugar:

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

Note

Las tareas en segundo plano requieren la identidad del paquete MSIX para el registro. Si la aplicación está desempaquetada, use temporizadores en proceso o tareas programadas en su lugar.

Ejecución prolongada para tareas críticas

Cuando tenga trabajo que no debe interrumpir la administración de energía (por ejemplo, guardar un archivo grande), use una sesión de ejecución extendida. Esto indica al sistema que su trabajo es importante, incluso en dispositivos con batería.

Comparación con la ejecución en segundo plano de UWP

Feature UWP Escritorio
La aplicación se ejecuta en segundo plano Solo con tareas en segundo plano o funcionalidades restringidas Siempre
Requiere la declaración de funcionalidad Sí (extendedBackgroundTaskTime) No
El sistema se cierra para ahorrar recursos No
Limitación del rendimiento por ahorro de batería El sistema aplica restricciones La aplicación debe autorregularse
Tareas en segundo plano para el trabajo controlado por eventos Mecanismo principal Complemento opcional