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.
En este artículo se describe el ciclo de vida de una aplicación de escritorio de SDK de Aplicaciones para Windows desde el inicio hasta la finalización. Comprender el ciclo de vida le ayuda a administrar el estado, conservar los recursos y ofrecer una experiencia de usuario fluida.
Importante
A diferencia de las aplicaciones para UWP, las aplicaciones de escritorio (incluidas WinUI 3) no están sujetas al modelo de administración del ciclo de vida de los procesos de UWP (PLM) de suspensión y terminación automáticas cuando están en segundo plano. Continúan ejecutándose hasta que el usuario los cierra o el proceso se cierra. Sin embargo, una aplicación de escritorio empaquetada sigue estando sujeta a políticas de energía y recursos de todo el sistema —por ejemplo, Modern Standby puede suspender todos los procesos en modo de usuario (incluida su aplicación) cuando el dispositivo entra en suspensión, y Windows puede aplicar el Modo de eficiencia (EcoQoS) para reducir la prioridad de la CPU y la calidad de servicio de las aplicaciones en segundo plano o minimizadas. La aplicación todavía debe controlar los apagados inesperados correctamente (por ejemplo, pérdida de energía, actualizaciones del sistema operativo o el usuario que termina el proceso a través del Administrador de tareas) y no debe suponer que siempre tiene acceso a CPU de velocidad completa mientras está en segundo plano.
Introducción al ciclo de vida
Una aplicación de escritorio SDK de Aplicaciones para Windows tiene un ciclo de vida más sencillo que para UWP:
| Estado | Description |
|---|---|
| No se está ejecutando | El proceso de aplicación no se ha iniciado. |
| En ejecución | La aplicación está activa. Puede que tenga o no una ventana visible. |
| Cerrado | El usuario (o sistema) finalizó el proceso. |
Dado que no hay ningún estado suspendido, no es necesario controlar Suspending ni Resuming eventos de la manera en que lo hacen las aplicaciones para UWP. En su lugar, céntrese en:
- Guardando el estado del usuario cuando se cierra la ventana o se cierra la aplicación.
- Control de la activación (inicio, archivo, protocolo u otros tipos de activación).
- Administrar el trabajo en segundo plano de forma eficaz para ahorrar batería en dispositivos portátiles.
Inicio de la aplicación
Cuando un usuario inicia tu aplicación, se ejecuta el método Microsoft.UI.Xaml.Application.OnLaunched. Úselo para inicializar la ventana principal y navegar a la primera página.
public partial class App : Microsoft.UI.Xaml.Application
{
private Microsoft.UI.Xaml.Window? m_window;
protected override void OnLaunched(Microsoft.UI.Xaml.LaunchActivatedEventArgs args)
{
m_window = new MainWindow();
m_window.Activate();
}
}
// MainWindow is the window class generated by the WinUI 3 project
// template (MainWindow.xaml / MainWindow.xaml.cs).
public partial class MainWindow : Microsoft.UI.Xaml.Window
{
}
Note
Las aplicaciones de escritorio de SDK de Aplicaciones para Windows no reciben del sistema ningún valor PreviousExecutionState. Si necesita restaurar el estado después de un bloqueo o una terminación inesperada, implemente su propio mecanismo de persistencia de estado (por ejemplo, guarde el estado en un archivo local en un temporizador o cuando se completen las acciones importantes).
Activación de la aplicación
SDK de Aplicaciones para Windows proporciona amplia compatibilidad con la activación a través del espacio de nombres Microsoft.Windows.AppLifecycle. La aplicación se puede activar mediante:
- Inicio predeterminado : el usuario selecciona el icono de la aplicación.
- Activación de archivos : el usuario abre un tipo de archivo asociado a la aplicación.
- Activación del protocolo : se invoca un esquema de URI registrado en la aplicación.
- Activación de inicio : la aplicación se registra para empezar en el inicio de sesión del usuario.
- Otros — notificación emergente, destino para compartir y tipos de activación adicionales.
Use AppInstance.GetActivatedEventArgs para determinar el tipo de activación:
using Microsoft.Windows.AppLifecycle;
var activatedArgs = AppInstance.GetCurrent().GetActivatedEventArgs();
switch (activatedArgs.Kind)
{
case ExtendedActivationKind.File:
var fileArgs = activatedArgs.Data as
Windows.ApplicationModel.Activation.IFileActivatedEventArgs;
// Handle the file
break;
case ExtendedActivationKind.Protocol:
var protocolArgs = activatedArgs.Data as
Windows.ApplicationModel.Activation.IProtocolActivatedEventArgs;
// Handle the URI
break;
case ExtendedActivationKind.Launch:
default:
// Standard launch
break;
}
Las aplicaciones empaquetadas se registran para la activación de archivos y protocolos a través de Package.appxmanifest. Las aplicaciones sin empaquetar no tienen ningún manifiesto, por lo que registran los mismos tipos de activación en el código mediante Microsoft.Windows.AppLifecycle.ActivationRegistrationManager. Para obtener un tutorial detallado de ambos enfoques, consulte Activación de aplicaciones para SDK de Aplicaciones para Windows.
Funcionamiento en segundo plano y en primer plano
Las aplicaciones de escritorio siguen ejecutándose tanto si están en primer plano como si no. El sistema no detiene los subprocesos ni reclama la memoria cuando el usuario cambia a otra aplicación. Sin embargo, todavía puede responder a los cambios de visibilidad para optimizar el uso de recursos:
- Liberar recursos de GPU o de renderizado de alto coste cuando la ventana esté minimizada.
- Pausa las animaciones o la vista previa multimedia cuando la ventana pierde el foco.
- Reduzca la frecuencia del temporizador para el sondeo en segundo plano.
Microsoft.UI.Xaml.Window no expone ningún VisibilityChanged evento. En su lugar, use el evento Window.Activated para detectar cuándo la ventana gana o pierde el foco, o use AppWindow.Changed para detectar cambios en el estado de la presentación (como minimizada o restaurada):
// m_window is the field declared on your App type (see "App launch" above).
Microsoft.UI.Xaml.Window m_window = this;
m_window.Activated += (sender, args) =>
{
if (args.WindowActivationState == WindowActivationState.Deactivated)
{
// Window lost focus — consider reducing work,
// for example pausing animations or media preview
}
else
{
// Window is active — resume normal work
}
};
// To specifically detect minimize/restore, use AppWindow.Changed
var appWindow = m_window.AppWindow;
appWindow.Changed += (sender, args) =>
{
if (args.DidPresenterChange)
{
if (sender.Presenter is OverlappedPresenter presenter &&
presenter.State == OverlappedPresenterState.Minimized)
{
// Window is minimized — pause expensive rendering
}
else
{
// Window is restored — resume rendering
}
}
};
Tip
En los dispositivos con batería, reducir el trabajo en segundo plano cuando la aplicación no está visible mejora la duración de la batería y la capacidad de respuesta del sistema, aunque el sistema no aplique la suspensión.
Guardar estado
Dado que las aplicaciones de escritorio no están suspendidas, puede controlar cuándo guardar el estado. Enfoques recomendados:
-
En el cierre de la ventana : controle el
Window.Closedevento para conservar los datos. - Guardado periódico : use un temporizador para guardar el estado a intervalos (por ejemplo, cada 60 segundos).
- En acciones importantes : guarde una vez que el usuario complete una acción significativa (por ejemplo, finalizar una edición).
// m_window is the field declared on your App type (see "App launch" above).
Microsoft.UI.Xaml.Window m_window = this;
m_window.Closed += (sender, args) =>
{
SaveApplicationState();
};
// Replace with your own logic to persist app state.
void SaveApplicationState() { }
Cierre y finalización de la aplicación
Una aplicación de escritorio finaliza cuando:
- El usuario cierra la última ventana.
- Tu código invoca
Application.Current.Exit(). - El proceso finaliza externamente (Administrador de tareas, apagado del sistema).
No hay ningún estado "terminado por el sistema para liberar recursos" como en UWP. La aplicación se ejecuta hasta que se cierra explícitamente.
Note
Si la aplicación se bloquea, se reinicia desde cero. Implemente el guardado de estado periódico para minimizar la pérdida de datos.
Diferencias del ciclo de vida de las aplicaciones para UWP
| Comportamiento | UWP | SDK de Aplicaciones para Windows para escritorio |
|---|---|---|
| Suspensión automática (PLM) | Sí: después de unos segundos en segundo plano | No, pero todo el dispositivo todavía puede entrar en modo de espera moderno |
| Terminación del sistema para liberar memoria | Sí: es posible que las aplicaciones suspendidas finalicen | No |
Suspending
/
Resuming eventos |
Sí | No aplicable |
| Prelanzamiento | Sí (participar) | No |
| Estado en segundo plano aplicado | Sí | No, pero el modo de eficiencia (EcoQoS) puede limitar las aplicaciones en segundo plano. |
| Restauración del estado después de la finalización | Necesario para una buena experiencia de usuario | Opcional — implemente el suyo propio |