Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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 | Sí | 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 |