Ejecutar en segundo plano de manera indefinida
Para proporcionar la mejor experiencia para los usuarios, Windows impone límites de recursos en aplicaciones de Plataforma universal de Windows (UWP). Las aplicaciones en primer plano reciben la mayor cantidad de memoria y tiempo de ejecución; las aplicaciones en segundo plano obtienen menos. Por lo tanto, los usuarios están protegidos de un rendimiento deficiente de la aplicación en primer plano y un drenaje pesado de la batería.
Sin embargo, los desarrolladores que escriben aplicaciones para UWP para uso personal (es decir, aplicaciones cargadas de lado que no se publicarán en Microsoft Store) o desarrolladores que escriben aplicaciones para UWP empresariales, pueden querer usar todos los recursos disponibles en el dispositivo sin ninguna limitación de ejecución extendida o en segundo plano. Las aplicaciones de línea de negocio y UWP personales pueden usar api en Windows Creators Update (versión 1703) para desactivar la limitación. Ten en cuenta que no puedes colocar una aplicación en Microsoft Store si usa estas API.
Ejecutar mientras se minimiza
Las aplicaciones para UWP se mueven a un estado suspendido cuando no se ejecutan en primer plano. En el escritorio, esto ocurre cuando un usuario minimiza la aplicación. Las aplicaciones usan una sesión de ejecución extendida para continuar ejecutándose mientras se minimizan. Las API de ejecución extendidas aceptadas por Microsoft Store se detallan en Posponer suspensión de la aplicación con ejecución extendida.
Si estás desarrollando una aplicación que no está pensada para enviarse a Microsoft Store, puedes usar ExtendedExecutionForegroundSession con la extendedExecutionUnconstrained
funcionalidad restringida para que la aplicación pueda seguir ejecutándose mientras se minimiza, independientemente del estado de energía del dispositivo.
La extendedExecutionUnconstrained
funcionalidad se agrega como una funcionalidad restringida en el manifiesto de la aplicación. Consulte Declaraciones de funcionalidad de la aplicación para obtener más información sobre las funcionalidades restringidas .
Nota:
Agregue la declaración de espacio de nombres XML xmlns:rescap y use el prefijo rescap para declarar la funcionalidad.
Para obtener más información, consulte la sección Funcionalidades restringidas de las declaraciones de funcionalidad de la aplicación.
Package.appxmanifest
<Package
...
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
IgnorableNamespaces="uap mp rescap">
...
<Capabilities>
<rescap:Capability Name="extendedExecutionUnconstrained"/>
</Capabilities>
</Package>
Cuando se usa la funcionalidad, se usan ExtendedExecutionForegroundSession y ExtendedExecutionForegroundReason en lugar de ExtendedExecutionSession y ExtendedExecutionReason. extendedExecutionUnconstrained
El mismo patrón para crear la sesión, establecer miembros y solicitar la extensión de forma asincrónica sigue siendo aplicable:
var newSession = new ExtendedExecutionForegroundSession();
newSession.Reason = ExtendedExecutionForegroundReason.Unconstrained;
newSession.Description = "Long Running Processing";
newSession.Revoked += SessionRevoked;
ExtendedExecutionForegroundResult result = await newSession.RequestExtensionAsync();
switch (result)
{
case ExtendedExecutionForegroundResult.Allowed:
DoLongRunningWork();
break;
default:
case ExtendedExecutionForegroundResult.Denied:
DoShortRunningWork();
break;
}
Puede solicitar esta sesión de ejecución extendida tan pronto como la aplicación llegue al primer plano. Las sesiones de ejecución extendida sin restricciones no están limitadas por cuotas de energía o por el ahorro de batería del sistema operativo. Siempre que exista una referencia al objeto de sesión, la aplicación permanecerá en estado en ejecución y no entrará en estado suspendido. Si el usuario cierra la aplicación, se revocará la sesión.
El registro para el evento Revoked permitirá que la aplicación realice cualquier trabajo de limpieza necesario. En el estado de suspensión, puede crear una sesión de ejecución extendida con ExtendedExecutionReason.SavingData para guardar los datos de usuario antes de que la aplicación finalice y quite de la memoria.
Ejecutar tareas en segundo plano indefinidamente
En el Plataforma universal de Windows, las tareas en segundo plano son procesos que se ejecutan en segundo plano sin ninguna forma de interfaz de usuario. Por lo general, las tareas en segundo plano se pueden ejecutar durante un máximo de veinticinco segundos antes de que se cancelen. Algunas de las tareas de ejecución más larga también tienen una comprobación para asegurarse de que la tarea en segundo plano no está inactiva o usa memoria. En Windows Creators Update (versión 1703), se introdujo la funcionalidad restringida extendedBackgroundTaskTime para quitar estos límites. La funcionalidad extendedBackgroundTaskTime se agrega como una funcionalidad restringida en el archivo de manifiesto de la aplicación:
Nota:
Agregue la declaración de espacio de nombres XML xmlns:rescap y use el prefijo rescap para declarar la funcionalidad.
Para obtener más información, consulte la sección Funcionalidades restringidas de las declaraciones de funcionalidad de la aplicación.
Package.appxmanifest
<Package
...
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
IgnorableNamespaces="uap mp rescap">
...
<Capabilities>
<rescap:Capability Name="extendedBackgroundTaskTime"/>
</Capabilities>
</Package>
Esta funcionalidad elimina las limitaciones del tiempo de ejecución y el guardián de tareas inactivas. Una vez iniciada una tarea en segundo plano, ya sea por un desencadenador o una llamada de app service, una vez que se tarda un aplazamiento en backgroundTaskInstance proporcionado por el método Run, se puede ejecutar indefinidamente. Si la aplicación está establecida en Administrado por Windows, es posible que todavía tenga una cuota de energía aplicada y sus tareas en segundo plano no se activarán cuando el ahorro de batería esté activo. Esto se puede cambiar con la configuración del sistema operativo. Puede encontrar más información en Optimización de la actividad en segundo plano.
El Plataforma universal de Windows supervisa la ejecución de tareas en segundo plano para garantizar una buena duración de la batería y una experiencia de aplicación en primer plano fluida. Sin embargo, las aplicaciones personales y las aplicaciones de línea de negocio enterprise pueden usar la ejecución extendida y la funcionalidad extendedBackgroundTaskTime para crear aplicaciones que se ejecutarán siempre que sea necesario independientemente de la disponibilidad de recursos del dispositivo.
Ten en cuenta que las funcionalidades extendedExecutionUnconstrained y extendedBackgroundTaskTime pueden invalidar la directiva predeterminada para las aplicaciones para UWP y puede provocar un drenaje significativo de la batería. Antes de usar estas funcionalidades, primero confirme que las directivas predeterminadas de ejecución extendida y tiempo de tarea en segundo plano no satisfacen sus necesidades y realizan pruebas en condiciones restringidas por batería para comprender el impacto que tendrá la aplicación en un dispositivo.
Consulte también
Eliminación de restricciones de recursos de tareas en segundo plano