Compartir a través de


Sincronización y actualización para aplicaciones de la Tienda en dispositivos Windows 8.1

Importante

Los metadatos de dispositivo están obsoletos y se eliminarán en una futura versión de Windows. Para obtener información sobre el reemplazo de esta funcionalidad, vea Driver Package Container Metadata.

La aplicación para UWP puede usar una tarea en segundo plano del dispositivo para sincronizar datos en el dispositivo periférico. Si la aplicación está asociada a los metadatos del dispositivo, esa aplicación de dispositivo para UWP también puede usar un agente en segundo plano del dispositivo para realizar actualizaciones de dispositivos, como las actualizaciones de firmware. Los agentes en segundo plano del dispositivo están sujetos a directivas que garantizan el consentimiento del usuario y ayudan a conservar la duración de la batería mientras los dispositivos se sincronizan y actualizan.

Para realizar operaciones de sincronización y actualización de dispositivos, cree una tarea en segundo plano del dispositivo que use DeviceUseTrigger y DeviceServicingTrigger, respectivamente. Para obtener información sobre cómo crear una tarea en segundo plano del dispositivo con el ejemplo de dispositivo USB personalizado, consulte Creación de una tarea en segundo plano del dispositivo.

Las API de dispositivo de Windows Runtime no requieren metadatos del dispositivo. Esto significa que la aplicación no necesita ser una aplicación de dispositivo para UWP para usarlas. Las aplicaciones para UWP pueden usar estas API para acceder a USB, dispositivos de interfaz humana (HID), dispositivos Bluetooth, etc. Para obtener más información, consulta Integración de dispositivos.

Introducción a las tareas en segundo plano del dispositivo

Cuando los usuarios mueven la aplicación para UWP fuera de la pantalla, Windows suspende la aplicación en memoria, lo que permite que otra aplicación tenga el primer plano. Cuando se suspende una aplicación, es residente en memoria, pero Windows lo detuvo de ejecutarse.

Cualquier operación de dispositivo en curso, como la sincronización y la actualización, se interrumpen sin la ayuda de una tarea en segundo plano del dispositivo. Windows proporciona dos desencadenadores de tareas en segundo plano para resolver este problema: DeviceUseTrigger y DeviceServicingTrigger. Estos desencadenadores permiten que la aplicación realice operaciones de sincronización y actualización de larga duración en el dispositivo periférico en segundo plano, incluso si la aplicación está suspendida. Para obtener más información sobre la suspensión de la aplicación, consulta Inicio, reanudación y multitarea.

Desencadenador de tareas en segundo plano Requiere metadatos del dispositivo Descripción
DeviceUseTrigger No Habilita las operaciones de sincronización de larga duración hacia o desde el dispositivo periférico mientras la aplicación está suspendida. La sincronización del dispositivo en segundo plano requiere que el usuario apruebe la sincronización en segundo plano por la aplicación. El dispositivo también debe estar conectado o emparejado con el equipo, con E/S activa y un máximo de 10 minutos de actividad en segundo plano permitida. Más información sobre la aplicación de directivas se describe más adelante en este artículo.
DeviceServicingTrigger Habilita actualizaciones de dispositivos de larga duración, por ejemplo, transferencias de configuración o actualizaciones de firmware, mientras se suspende la aplicación. La actualización del dispositivo en segundo plano requiere aprobación del usuario cada vez que se usa la tarea en segundo plano. A diferencia de la tarea en segundo plano DeviceUseTrigger, la tarea en segundo plano DeviceServicingTrigger permite reiniciar y desconectar el dispositivo y permite un máximo de 30 minutos de actividad en segundo plano. Más información sobre la aplicación de directivas se describe más adelante en este artículo.

DeviceServicingTrigger requiere metadatos de dispositivo porque la aplicación debe especificarse como una aplicación con privilegios para realizar operaciones de actualización de dispositivos.

Privilegios de la aplicación

Una aplicación con privilegios puede realizar algunas operaciones críticas de dispositivo, como actualizaciones de dispositivos de larga duración. Una aplicación con privilegios es la aplicación que el fabricante del dispositivo autoriza a realizar esas operaciones. Los metadatos del dispositivo especifican qué aplicación, si existe, se designa como la aplicación con privilegios para un dispositivo.

Al crear los metadatos del dispositivo con el asistente para metadatos de dispositivo, especifique la aplicación en la página Especificar información de la aplicación de dispositivo para UWP . Para obtener más información, consulta Paso 2: Crear metadatos de dispositivo para tu aplicación de dispositivo para UWP.

Protocolos compatibles

Las tareas en segundo plano del dispositivo que usan DeviceUseTrigger y DeviceServicingTrigger permiten a la aplicación comunicarse con dispositivos periféricos a través de protocolos específicos. Las tareas desencadenadas por el sistema que suelen usar las aplicaciones para UWP no admiten estos protocolos.

Protocolo DeviceServicingTrigger DeviceUseTrigger Desencadenadores del sistema
USB deviceservicingtrigger admite usb. DeviceUseTrigger es compatible con USB los desencadenadores del sistema no admiten usb
HID deviceservicingtrigger admite hid. deviceusetrigger es compatible con hid Desencadenadores del sistema no admiten HID
Bluetooth RFCOMM deviceservicingtrigger admite bluetooth rfcomm. deviceusetrigger admite bluetooth rfcomm los activadores del sistema no admiten bluetooth rfcomm
Bluetooth GATT Deviceservicingtrigger es compatible con Bluetooth GATT. deviceusetrigger admite bluetooth gatt Los desencadenadores del sistema no admiten Bluetooth GATT
MTP deviceservicingtrigger admite mtp. deviceusetrigger no es compatible con mtp los activadores del sistema no admiten mtp
Red cableada deviceservicingtrigger admite cableado de red. deviceusetrigger no admite la red cableada Los desencadenadores del sistema no admiten la red cableada
Red Wi-Fi deviceservicingtrigger admite wi-fien red. deviceusetrigger no admite wi-fien red Los desencadenadores del sistema no admiten la red wi-fi
IDeviceIOControl deviceservicingtrigger admite ideviceiocontrol. deviceusetrigger no admite ideviceiocontrol deviceusetrigger no admite ideviceiocontrol

Registro de tareas en segundo plano en el manifiesto del paquete de aplicación

La aplicación realiza operaciones de sincronización y actualización en el código que se ejecuta como parte de una tarea en segundo plano. Este código está incrustado en una clase de Windows Runtime que implementa IBackgroundTask (o en una página de JavaScript dedicada para aplicaciones de JavaScript). Para usar una tarea en segundo plano del dispositivo, la aplicación debe declararla en el archivo de manifiesto de la aplicación de una aplicación en primer plano, como lo hace para las tareas en segundo plano desencadenadas por el sistema.

En este ejemplo de un archivo de manifiesto de paquete de aplicación, DeviceLibrary.SyncContent y DeviceLibrary.UpdateFirmware son puntos de entrada de la aplicación en primer plano. DeviceLibrary.SyncContent es el punto de entrada de la tarea en segundo plano que usa DeviceUseTrigger. DeviceLibrary.UpdateFirmware es el punto de entrada de la tarea en segundo plano que usa DeviceServicingTrigger.

<Extensions>
  <Extension Category="windows.backgroundTasks" EntryPoint="DeviceLibrary.SyncContent">
    <BackgroundTasks>
      <m2:Task Type="deviceUse" /> 
    </BackgroundTasks>
  </Extension>
  <Extension Category="windows.backgroundTasks" EntryPoint="DeviceLibrary.UpdateFirmware">
    <BackgroundTasks>
      <m2:Task Type="deviceServicing" /> 
    </BackgroundTasks>
  </Extension>
</Extensions>

Utilizar su dispositivo con tareas del dispositivo en segundo plano

Para desarrollar la aplicación para aprovechar las tareas en segundo plano DeviceUseTrigger y DeviceServicingTrigger, sigue este conjunto básico de pasos. Para obtener más información sobre las tareas en segundo plano, consulta Compatibilidad de la aplicación con tareas en segundo plano.

  1. La aplicación registra su tarea en segundo plano en el manifiesto de la aplicación e inserta el código de tarea en segundo plano en una clase de Windows Runtime que implementa IBackgroundTask o en una página de JavaScript dedicada para aplicaciones de JavaScript.

  2. Cuando se inicie la aplicación, creará y configurará un objeto de desencadenador de dispositivo del tipo adecuado, ya sea DeviceUseTrigger o DeviceServicingTrigger, y almacenará la instancia del desencadenador para su uso futuro.

  3. La aplicación comprueba si la tarea en segundo plano se registró anteriormente y, si no es así, la registra en el desencadenador del dispositivo. La aplicación no puede establecer condiciones en la tarea asociada a este desencadenador.

  4. Cuando la aplicación necesita desencadenar la tarea en segundo plano, llama al método de activación RequestAsync en el objeto de desencadenador del dispositivo.

  5. La tarea en segundo plano no está limitada, como otras tareas en segundo plano del sistema (no hay ninguna cuota de tiempo de CPU), pero se ejecuta con una prioridad reducida para mantener la capacidad de respuesta de las aplicaciones en primer plano.

  6. En función del tipo de desencadenador, Windows valida que se cumplen las directivas necesarias, incluida la solicitud de consentimiento del usuario para la operación antes de iniciar la tarea en segundo plano.

  7. Windows supervisa las condiciones del sistema y el tiempo de ejecución de la tarea y, si es necesario, cancela la tarea si ya no se cumplen las condiciones necesarias.

  8. Cuando las tareas en segundo plano notifican el progreso o la finalización, la aplicación recibe estos eventos a través del progreso y los eventos completados en la tarea registrada.

Puntos importantes que se deben tener en cuenta al usar las tareas en segundo plano del dispositivo

  • La capacidad de desencadenar tareas en segundo plano mediante programación que usan DeviceUseTrigger y DeviceServicingTrigger se limita solo a las tareas en segundo plano del dispositivo.

  • Windows aplica determinadas directivas para garantizar el consentimiento del usuario al actualizar sus dispositivos periféricos. Se aplican más directivas para conservar la duración de la batería del usuario al sincronizar y actualizar dispositivos periféricos.

  • Windows puede cancelar las tareas en segundo plano que usan DeviceUseTrigger y DeviceServicingTrigger cuando ya no se cumplen determinados requisitos de directiva, incluida una cantidad máxima de tiempo en segundo plano (tiempo de reloj). Es importante tener en cuenta estos requisitos de directiva al usar estas tareas en segundo plano para interactuar con el dispositivo periférico.

Sugerencia

Para ver cómo funcionan estas tareas en segundo plano, descargue un ejemplo. El ejemplo de dispositivo USB personalizado muestra una tarea en segundo plano que realiza la sincronización de dispositivos con DeviceUseTrigger.

Cuando la aplicación usa DeviceUseTrigger o DeviceServicingTrigger, Windows aplica directivas para asegurarse de que el usuario concede permiso a la aplicación para acceder a su dispositivo en segundo plano para sincronizar y actualizar contenido. Las directivas también se aplican para ayudar a conservar la duración de la batería del usuario al sincronizar y actualizar dispositivos periféricos.

Una tarea en segundo plano que usa DeviceUseTrigger requiere un consentimiento de usuario único que permita que la aplicación se sincronice en segundo plano. Este consentimiento se almacena por aplicación y modelo por dispositivo. El usuario da su consentimiento para permitir que la aplicación acceda al dispositivo en segundo plano al igual que da su consentimiento para permitir que la aplicación acceda al dispositivo cuando la aplicación está en primer plano.

En el ejemplo siguiente, una aplicación denominada Tailspin Toys obtiene permiso de usuario para sincronizarse en segundo plano.

cuadro de diálogo de mensaje de consentimiento del usuario para la sincronización de dispositivos.

Si los usuarios cambian de opinión más adelante, pueden revocar permisos en Configuración.

Cuadro de diálogo de configuración de permisos de sincronización de dispositivos.

A diferencia de las tareas en segundo plano que usan DeviceUseTrigger, las que usan la tarea en segundo plano DeviceServicingTrigger requieren consentimiento del usuario cada vez que se desencadena la tarea en segundo plano. Este consentimiento no se almacena como si fuera para DeviceUseTrigger. Esto se debe a que las actualizaciones de firmware del dispositivo implican operaciones de mayor riesgo y necesitan más tiempo para completarse.

Windows también proporciona a los usuarios información sobre las actualizaciones de dispositivos. Esto incluye advertencias para mantener el dispositivo conectado a lo largo de la actualización y asegurarse de que el PC está cargado. Windows también muestra el tiempo de ejecución aproximado de la operación si la aplicación la proporciona.

cuadro de diálogo del mensaje de consentimiento del usuario para la actualización del dispositivo.

Restricciones de frecuencia y primer plano

No hay ninguna restricción en la frecuencia con la que la aplicación puede iniciar operaciones, pero la aplicación solo puede ejecutar una operación de tarea en segundo plano DeviceUseTrigger o DeviceServicingTrigger a la vez (esto no afecta a otros tipos de tareas en segundo plano) y puede iniciar una tarea en segundo plano solo mientras la aplicación está en primer plano. Cuando la aplicación no está en primer plano, no puede iniciar una tarea en segundo plano con DeviceUseTrigger o DeviceServicingTrigger. La aplicación no puede iniciar una segunda tarea en segundo plano del dispositivo antes de que se haya completado la primera tarea en segundo plano.

Directivas de tareas en segundo plano del dispositivo

Windows aplica directivas cuando la aplicación usa una tarea en segundo plano del dispositivo. Si no se cumplen estas directivas, es posible que se cancele la tarea en segundo plano mediante DeviceUseTrigger o DeviceServicingTrigger. Es importante tener en cuenta estos requisitos de directiva al usar tareas en segundo plano del dispositivo para interactuar con el dispositivo periférico.

Directivas de inicio de tareas

Esta tabla indica qué directivas de inicio de tareas se aplican a cada desencadenador de tarea en segundo plano.

Política DeviceServicingTrigger DeviceUseTrigger
Su aplicación UWP está en primer plano cuando se desencadena la tarea en segundo plano. se aplica la directiva. se aplica la directiva
El dispositivo está conectado al sistema (o dentro del rango de alcance para un dispositivo inalámbrico). se aplica la directiva. se aplica la directiva
La tarea en segundo plano consume 400 ms de tiempo de CPU (suponiendo una CPU de 1GHz) cada minuto cuando la pantalla está bloqueada o cada 5 minutos cuando la pantalla no está bloqueada. Si no se cumple esta directiva, se puede cancelar la tarea. se aplica la directiva. se aplica la directiva
El dispositivo es accesible para la aplicación mediante las API de periféricos del dispositivo (las API de Windows Runtime para USB, HID, Bluetooth, etc.). Si la aplicación no puede acceder al dispositivo, se deniega el acceso a las tareas en segundo plano. se aplica la directiva. se aplica la directiva
El punto de entrada de tarea en segundo plano que proporciona la aplicación se registra en el manifiesto del paquete de la aplicación. se aplica la directiva. se aplica la directiva
El usuario ha dado permiso al proceso para continuar. Cada vez. La primera vez, luego se controla mediante los permisos de la aplicación.
La estimación de tiempo proporcionada por la aplicación es inferior a 30 minutos. se aplica la directiva. la directiva no se aplica
La aplicación se especifica como la aplicación con privilegios para el dispositivo. (Debe haber una coincidencia completa del ID de la aplicación con la lista de aplicaciones privilegiadas en los metadatos del dispositivo del contenedor de dispositivos). se aplica la directiva. la directiva no se aplica
Al equipo le queda más de un 33% de capacidad de batería o está conectado a CA. se aplica la directiva. la directiva no se aplica
Solo se ejecuta una tarea en segundo plano del dispositivo por tipo de operación. se aplica la comprobación de políticas. se aplica la directiva

Comprobaciones de directivas en tiempo de ejecución

Windows aplica los siguientes requisitos de directiva en tiempo de ejecución mientras la tarea se ejecuta en segundo plano. Si alguno de los requisitos de tiempo de ejecución deja de ser verdadero, Windows cancelará la tarea en segundo plano de tu dispositivo.

En esta tabla se indican las directivas en tiempo de ejecución que se aplican a cada desencadenador de tareas en segundo plano.

Comprobación de directivas DeviceServicingTrigger DeviceUseTrigger
Límite de tiempo del reloj: la cantidad total de tiempo que la tarea de la aplicación se puede ejecutar en segundo plano. 30 minutos 10 minutos
El dispositivo está conectado al sistema (o dentro del rango de alcance para un dispositivo inalámbrico). la directiva no se aplica. se aplican las comprobaciones de directiva
La tarea realiza E/S normal en el dispositivo (1 E/S cada 5 segundos). la directiva no se aplica. se aplican las comprobaciones de directiva
La aplicación no ha cancelado la tarea. se aplica la comprobación de políticas. se aplican las comprobaciones de directiva
La aplicación no ha salido. se aplica la comprobación de políticas. se aplican las comprobaciones de directiva

procedimientos recomendados

Estos son los procedimientos recomendados para las aplicaciones de dispositivos para UWP que usan las tareas en segundo plano del dispositivo.

Modelo de programación de tareas en segundo plano del dispositivo

El uso de las tareas en segundo plano DeviceUseTrigger o DeviceServicingTrigger de la aplicación garantiza que las operaciones de sincronización o actualización de dispositivos iniciadas desde la aplicación en primer plano sigan ejecutándose en segundo plano si los usuarios cambian de aplicaciones y la aplicación en primer plano está suspendida por Windows. Se recomienda seguir este modelo general para registrar, desencadenar y anular el registro de las tareas en segundo plano:

  1. Registre la tarea en segundo plano antes de solicitar el desencadenador.

  2. Conecte los controladores de eventos de progreso y finalización al desencadenador. Cuando tu aplicación vuelve de la suspensión, Windows proporciona a tu aplicación cualquier evento de progreso o finalización en espera que se pueda usar para determinar el estado de tus tareas en segundo plano.

  3. Cierre cualquier objeto de dispositivo abierto cuando desencadene las tareas en segundo plano DeviceUseTrigger o DeviceServicingTrigger para que esos dispositivos queden libres para que la tarea en segundo plano los pueda abrir y utilizar.

  4. Registre el desencadenador.

  5. Cuando se complete una tarea, anule el registro de la tarea en segundo plano. Cuando se complete la tarea en segundo plano, puedes anular el registro de las tareas en segundo plano y volver a abrir el dispositivo y usarlo con regularidad desde tu aplicación para UWP.

  6. Regístrese para eventos de cancelación desde la clase de tareas en segundo plano. Registrar eventos de cancelación permite que el código de tu tarea en segundo plano detenga limpiamente la tarea en segundo plano que está ejecutándose cuando es cancelada por Windows o por tu aplicación en primer plano.

  7. En la salida de la aplicación (no suspensión), anule el registro y cancele las tareas en ejecución.

    • Cuando se cierre la aplicación, anule el registro y cancele las tareas en ejecución.

    • Cuando se cierra la aplicación, las tareas en segundo plano se cancelan y los controladores de eventos existentes se desconectan de las tareas en segundo plano existentes. Esto evita que determine el estado de las tareas en segundo plano. Anular el registro y cancelar la tarea en segundo plano permitirá que el código de cancelación detenga limpiamente las tareas en segundo plano.

Sugerencia

Para obtener una descripción detallada de cómo se hace esto con el ejemplo de dispositivo USB personalizado, consulte Creación de una tarea en segundo plano del dispositivo.

Cancelación de una tarea en segundo plano

Para cancelar una tarea que se ejecuta en segundo plano desde la aplicación en primer plano, usa el método Unregister en el objeto BackgroundTaskRegistration que usas en la aplicación para registrar la tarea en segundo plano DeviceUseTrigger o DeviceServicingTrigger . Anular el registro de la tarea en segundo plano mediante el método Unregister en BackgroundTaskRegistration hace que la infraestructura de tareas en segundo plano cancele la tarea en segundo plano.

El método Unregister también toma un valor Boolean true o false para indicar si las instancias de la tarea en segundo plano que se están ejecutando actualmente deben cancelarse sin permitirles terminar. Para obtener más información, consulte la referencia de API para BackgroundTaskRegistration.Unregister.