Compartir a través de


Ejecutar en segundo plano indefinidamente

Para proporcionar la mejor experiencia para los usuarios, Windows impone límites de recursos en aplicaciones para la 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. Los usuarios se protegen así de un rendimiento de la aplicación en primer plano deficiente y de una gran descarga de la batería.

Sin embargo, los desarrolladores que escriben aplicaciones UWP para uso personal (es decir, aplicaciones cargadas externamente que no se publicarán en la Microsoft Store) o los desarrolladores que escriben aplicaciones UWP para empresas 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 el Windows Creators Update (versión 1703) para desactivar el control de limitación. Ten en cuenta que no puedes colocar una aplicación en Microsoft Store si usa estas API.

Ejecutar en estado minimizado

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 están minimizadas. Las API de ejecución extendidas aceptadas por Microsoft Store se detallan en Posponer suspensión de la aplicación con la 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 capacidad.

Para obtener más información, consulte la sección Funcionalidades restringidas de 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>

Al usar la funcionalidad extendedExecutionUnconstrained, se utilizan ExtendedExecutionForegroundSession y ExtendedExecutionForegroundReason en lugar de ExtendedExecutionSession y ExtendedExecutionReason. 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 tu 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 la 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 prolongada también tienen una comprobación para asegurarse de que la tarea en segundo plano no esté inactiva ni consuma memoria. En Windows Creators Update (versión 1703), se introdujo la funcionalidad extendedBackgroundTaskTime restringida 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 capacidad.

Para obtener más información, consulte la sección Funcionalidades restringidas de 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 a un servicio de aplicaciones, una vez que toma un aplazamiento en el 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. Hay más información disponible en Optimizando la actividad en segundo plano.

La 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

quitar restricciones de recursos de tareas en segundo plano