Hacer que tu aplicación sea compatible con las tareas en segundo plano

Los temas de esta sección muestran cómo hacer que el código ligero se ejecute en segundo plano en respuesta a los desencadenadores. Puedes usar tareas en segundo plano para proporcionar funcionalidad cuando la aplicación está suspendida o no en ejecución. También puede usar tareas en segundo plano para aplicaciones de comunicación en tiempo real como VOIP, correo electrónico e mensajería instantánea.

Reproducción de elementos multimedia en segundo plano

A partir de Windows 10, versión 1607, reproducir audio en segundo plano es mucho más fácil. Consulte Reproducir elementos multimedia en segundo plano para obtener más información.

Tareas en segundo plano en proceso y fuera de proceso

Hay dos enfoques para implementar tareas en segundo plano:

  • En proceso: la aplicación y su proceso en segundo plano se ejecutan en el mismo proceso
  • Fuera de proceso: la aplicación y el proceso en segundo plano se ejecutan en procesos independientes.

La compatibilidad en segundo plano en proceso se introdujo en Windows 10, versión 1607, para simplificar la escritura de tareas en segundo plano. Pero todavía puede escribir tareas en segundo plano fuera de proceso. Consulte Directrices para las tareas en segundo plano para obtener recomendaciones sobre cuándo escribir una tarea en segundo plano fuera de proceso frente a una tarea en segundo plano fuera de proceso.

Las tareas en segundo plano fuera del proceso son más resistentes porque el proceso en segundo plano no puede reducir el proceso de la aplicación si algo va mal. Pero la resistencia tiene el precio de una mayor complejidad para administrar la comunicación entre procesos entre la aplicación y la tarea en segundo plano.

Las tareas en segundo plano fuera del proceso se implementan como clases ligeras que implementan la interfaz IBackgroundTask que el sistema operativo se ejecuta en un proceso independiente (backgroundtaskhost.exe). Registre una tarea en segundo plano mediante la clase BackgroundTaskBuilder. El nombre de clase se usa para especificar el punto de entrada al registrar la tarea en segundo plano.

En Windows 10, versión 1607, puedes habilitar la actividad en segundo plano sin crear una tarea en segundo plano. En su lugar, puede ejecutar el código en segundo plano directamente dentro del proceso de la aplicación en primer plano.

Para empezar a trabajar rápidamente con tareas en segundo plano en proceso, consulte Creación y registro de una tarea en segundo plano en proceso.

Para empezar a trabajar rápidamente con tareas en segundo plano fuera del proceso, consulte Creación y registro de una tarea en segundo plano fuera del proceso.

Sugerencia

 A partir de Windows 10, ya no es necesario colocar una aplicación en la pantalla de bloqueo como requisito previo para registrar una tarea en segundo plano.

Tareas en segundo plano para eventos del sistema

La aplicación puede responder a eventos generados por el sistema registrando una tarea en segundo plano con la clase SystemTrigger. Una aplicación puede usar cualquiera de los siguientes desencadenadores de eventos del sistema (definidos en SystemTriggerType)

Nombre del desencadenador Descripción
InternetAvailable Internet está disponible.
NetworkStateChange Se produce un cambio de red, como un cambio en el costo o la conectividad.
OnlineIdConnectedStateChange El identificador en línea asociado a la cuenta cambia.
SmsReceived Un dispositivo de banda ancha móvil instalado recibe un nuevo mensaje SMS.
TimeZoneChange La zona horaria cambia en el dispositivo (por ejemplo, cuando el sistema ajusta el reloj para el horario de verano).

Para obtener más información, consulta Responder a eventos del sistema con tareas en segundo plano.

Condiciones para tareas en segundo plano

Puede controlar cuándo se ejecuta la tarea en segundo plano, incluso después de que se desencadene, agregando una condición. Una vez desencadenada, una tarea en segundo plano no se ejecutará hasta que se cumplan todas sus condiciones. Se pueden usar las condiciones siguientes (representadas por la enumeración SystemConditionType).

Nombre de condición Descripción
InternetAvailable Internet debe estar disponible.
InternetNotAvailable Internet debe no estar disponible.
SessionConnected La sesión debe estar conectada.
SessionDisconnected La sesión debe estar desconectada.
UserNotPresent El usuario debe estar fuera.
UserPresent El usuario debe estar presente.

Agregue la condición InternetAvailable a su tarea en segundo plano BackgroundTaskBuilder.AddCondition para retrasar la activación de la tarea en segundo plano hasta que la pila de red se ejecute. Esta condición ahorra energía porque la tarea en segundo plano no se ejecutará hasta que la red esté disponible. Esta condición no proporciona una activación en tiempo real.

Si la tarea en segundo plano requiere conectividad de red, establezca IsNetworkRequested para asegurarse de que la red permanece activa mientras se ejecuta la tarea en segundo plano. Esto indica a la infraestructura de tareas en segundo plano que debe mantener la red mientras se esté ejecutando la tarea, incluso si el dispositivo ha entrado en modo de espera conectado. Si la tarea en segundo plano no establece IsNetworkRequested, la tarea en segundo plano no podrá acceder a la red cuando esté en modo de espera conectado (por ejemplo, cuando la pantalla de un teléfono está desactivada). Para obtener más información sobre las condiciones de tarea en segundo plano, consulta Establecer condiciones para ejecutar una tarea en segundo plano.

Requisitos del manifiesto de aplicación

Para que la aplicación pueda registrar correctamente una tarea en segundo plano que se ejecute fuera de proceso, debe declararse en el manifiesto de aplicación. Las tareas en segundo plano que se ejecutan en el mismo proceso que su aplicación host no necesitan declararse en el manifiesto de aplicación. Para obtener más información, consulte Declarar tareas en segundo plano en el manifiesto de aplicación.

Tareas en segundo plano

Los siguientes desencadenadores en tiempo real se pueden usar para ejecutar código personalizado ligero en segundo plano:

Desencadenador en tiempo real Descripción
Canal de control Las tareas en segundo plano pueden mantener activa una conexión y recibir mensajes en el canal de control mediante ControlChannelTrigger. Si la aplicación escucha un socket, puedes usar Socket Broker en lugar de ControlChannelTrigger. Para obtener más información sobre el uso del Agente de sockets, consulte SocketActivityTrigger. ControlChannelTrigger no se admite en Windows Phone.
Temporizador Las tareas en segundo plano se pueden ejecutar con tanta frecuencia cada 15 minutos y se pueden establecer para que se ejecuten en un momento determinado mediante TimeTrigger. Para obtener más información, consulta Ejecutar una tarea en segundo plano en un temporizador.
Notificación push Las tareas en segundo plano responden a PushNotificationTrigger para recibir notificaciones push sin procesar.

Note  

Las aplicaciones universales de Windows deben llamar a RequestAccessAsync antes de registrar cualquiera de los tipos de desencadenador en segundo plano.

Para asegurarse de que la aplicación universal de Windows sigue ejecutándose correctamente después de publicar una actualización, llame a RemoveAccess y, a continuación, llame a RequestAccessAsync cuando la aplicación se inicie después de actualizarse. Para obtener más información, vea Directrices para tareas en segundo plano.

Límites en el número de instancias de desencadenador: hay límites para el número de instancias de algunos desencadenadores que puede registrar una aplicación. Una aplicación solo puede registrar ApplicationTrigger, MediaProcessingTrigger y DeviceUseTrigger una vez por instancia de la aplicación. Si una aplicación supera este límite, el registro producirá una excepción.

Desencadenadores de eventos del sistema

La enumeración SystemTriggerType representa los siguientes desencadenadores de eventos del sistema:

Nombre del desencadenador Descripción
UserPresent La tarea en segundo plano se desencadena cuando el usuario está presente.
UserAway La tarea en segundo plano se desencadena cuando el usuario está ausente.
ControlChannelReset La tarea en segundo plano se desencadena cuando se restablece un canal de control.
SessionConnected La tarea en segundo plano se desencadena cuando la sesión está conectada.

  El siguiente evento del sistema desencadena la señal cuando el usuario ha movido o desactivado una aplicación.

Nombre del desencadenador Descripción
LockScreenApplicationAdded Se agrega un icono de aplicación a la pantalla de bloqueo.
LockScreenApplicationRemoved Se quita un icono de aplicación de la pantalla de bloqueo.

 

Restricciones de recursos de tareas en segundo plano

Las tareas en segundo plano son ligeras. Mantener la ejecución en segundo plano al mínimo garantiza la mejor experiencia del usuario con aplicaciones en primer plano y duración de la batería. Esto se aplica aplicando restricciones de recursos a tareas en segundo plano.

Las tareas en segundo plano se limitan a 30 segundos de uso del reloj.

Restricciones de memoria

Debido a las restricciones de recursos para dispositivos con poca memoria, las tareas en segundo plano pueden tener un límite de memoria que determina la cantidad máxima de memoria que puede usar la tarea en segundo plano. Si la tarea en segundo plano intenta una operación que superaría este límite, se producirá un error en la operación y puede generar una excepción de memoria insuficiente, que la tarea puede controlar. Si la tarea no controla la excepción de memoria insuficiente o la naturaleza de la operación intentada es tal que no se generó una excepción fuera de memoria, la tarea se finalizará inmediatamente.

Puede usar las API memoryManager para consultar el uso y el límite actuales de la memoria para detectar el límite (si existe) y para supervisar el uso continuo de la memoria de la tarea en segundo plano.

Límite por dispositivo para aplicaciones con tareas en segundo plano para dispositivos con poca memoria

En los dispositivos con restricción de memoria, hay un límite para el número de aplicaciones que se pueden instalar en un dispositivo y usar tareas en segundo plano en cualquier momento dado. Si se supera este número, se producirá un error en la llamada a RequestAccessAsync, que es necesario para registrar todas las tareas en segundo plano.

Ahorro de batería

A menos que excluyas la aplicación para que pueda seguir ejecutando tareas en segundo plano y recibir notificaciones push cuando el ahorro de batería esté activado, la característica Ahorro de batería, cuando esté habilitada, impedirá que las tareas en segundo plano se ejecuten cuando el dispositivo no esté conectado a energía externa y la batería se quede por debajo de una cantidad especificada de energía restante. Esto no le impedirá registrar tareas en segundo plano.

Sin embargo, para aplicaciones empresariales y aplicaciones que no se publicarán en Microsoft Store, consulta Ejecutar en segundo plano indefinidamente para aprender a usar una funcionalidad para ejecutar una tarea en segundo plano o una sesión de ejecución extendida en segundo plano indefinidamente.

Garantías de recursos de tareas en segundo plano para la comunicación en tiempo real

Para evitar que las cuotas de recursos interfieran con la funcionalidad de comunicación en tiempo real, las tareas en segundo plano que usan ControlChannelTrigger y PushNotificationTrigger reciben cuotas de recursos de CPU garantizadas para cada tarea en ejecución. Las cuotas de recursos son como se mencionó anteriormente y permanecen constantes para estas tareas en segundo plano.

La aplicación no tiene que hacer nada diferente para obtener las cuotas de recursos garantizadas para las tareas en segundo plano ControlChannelTrigger y PushNotificationTrigger. El sistema siempre los trata como tareas críticas en segundo plano.

Desencadenador de mantenimiento

Las tareas de mantenimiento solo se ejecutan cuando el dispositivo está conectado a la alimentación de CA. Para obtener más información, consulta Usar un desencadenador de mantenimiento.

Tareas en segundo plano para sensores y dispositivos

La aplicación puede acceder a sensores y dispositivos periféricos desde una tarea en segundo plano con la clase DeviceUseTrigger. Puede usar este desencadenador para operaciones de ejecución prolongada, como la sincronización de datos o la supervisión. A diferencia de las tareas de los eventos del sistema, una tarea DeviceUseTrigger solo se puede desencadenar mientras la aplicación se ejecuta en primer plano y no se puede establecer ninguna condición en él.

Importante

DeviceUseTrigger y DeviceServicingTrigger no se pueden usar con tareas en segundo plano en proceso.

Algunas operaciones críticas del dispositivo, como las actualizaciones de firmware de larga duración, no se pueden realizar con DeviceUseTrigger. Estas operaciones solo se pueden realizar en el equipo y solo mediante una aplicación con privilegios que use DeviceServicingTrigger. Una aplicación con privilegios es una aplicación que el fabricante del dispositivo ha autorizado para realizar esas operaciones. Los metadatos del dispositivo se usan para especificar qué aplicación, si existe, se ha designado como la aplicación con privilegios para un dispositivo. Para obtener más información, consulta Sincronización y actualización de dispositivos de Microsoft Store

Administración de tareas en segundo plano

Las tareas en segundo plano pueden notificar el progreso, la finalización y la cancelación de la aplicación mediante eventos y almacenamiento local. La aplicación también puede detectar excepciones producidas por una tarea en segundo plano y administrar el registro de tareas en segundo plano durante las actualizaciones de la aplicación. Para más información, consulte:

Controlar una tarea en segundo plano cancelada
Supervisar el progreso y la finalización de tareas en segundo plano

Compruebe el registro de tareas en segundo plano durante el inicio de la aplicación. Asegúrate de que las tareas en segundo plano no agrupadas de la aplicación estén presentes en BackgroundTaskBuilder.AllTasks. Vuelva a registrar los que no están presentes. Anule el registro de las tareas que ya no sean necesarias. Esto garantiza que todos los registros de tareas en segundo plano estén actualizados cada vez que se inicie la aplicación.

Instrucciones conceptuales para la multitarea en Windows 10

Guía de tareas en segundo plano relacionadas