Compartir a través de


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

En Windows 8.1, la aplicación para UWP puede usar una tarea en segundo plano del dispositivo para sincronizar los 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 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 se sincronizan y actualizan los dispositivos.

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 hacerlo con el Ejemplo de dispositivo USB personalizado, consulte Creación de una tarea en segundo plano del dispositivo.

Nota:

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, consulte Integración de dispositivos.

Información general de la tarea 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. Esto permite que otra aplicación se ejecute en primer plano. Cuando una aplicación está suspendida, reside en memoria y Windows ha impedido que se ejecute. Cuando esto ocurre, sin la ayuda de una tarea en segundo plano del dispositivo, cualquier operación en curso del dispositivo, como la sincronización y la actualización, se interrumpirá. Windows 8.1 proporciona dos nuevos desencadenadores de tareas en segundo plano que permiten a la aplicación realizar 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: DeviceUseTrigger y DeviceServicingTrigger. Para obtener más información sobre la suspensión de aplicaciones, consulte 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 haya aprobado 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 se permite un máximo de 10 minutos de actividad en segundo plano. Más adelante en este tema se describen más detalles sobre la aplicación de directivas.
DeviceServicingTrigger Habilita las actualizaciones de dispositivos de larga duración, por ejemplo, transferencias de configuración o actualizaciones de firmware, mientras la aplicación está suspendida. 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 adelante en este tema se describen más detalles sobre la aplicación de directivas.

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

Algunas operaciones críticas del dispositivo, como las actualizaciones de dispositivos de larga duración, solo se pueden realizar mediante una aplicación con privilegios. Una aplicación con privilegios es aquella que el fabricante del dispositivo ha autorizado para realizar esas operaciones. Los metadatos del dispositivo especifican qué aplicación, si la hay, se ha designado como 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, consulte Paso 2: Crear metadatos de dispositivo para la aplicación de dispositivo para UWP.

Protocolos admitidos

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 que no son compatibles con las tareas desencadenadas por el sistema que suelen usar las aplicaciones para UWP.

Protocolo DeviceServicingTrigger DeviceUseTrigger Desencadenadores del sistema
USB deviceservicingtrigger supports usb. deviceusetrigger supports usb system triggers do not support usb
HID deviceservicingtrigger supports hid. deviceusetrigger supports hid system triggers do not support hid
Bluetooth RFCOMM deviceservicingtrigger supports bluetooth rfcomm. deviceusetrigger supports bluetooth rfcomm system triggers do not support bluetooth rfcomm
Bluetooth GATT deviceservicingtrigger supports bluetooth gatt. deviceusetrigger supports bluetooth gatt system triggers do not support bluetooth gatt
MTP deviceservicingtrigger supports mtp. deviceusetrigger does not support mtp system triggers do not support mtp
Red cableada deviceservicingtrigger supports network wired. deviceusetrigger does not support network wired system triggers do not support network wired
Red Wi-Fi deviceservicingtrigger supports networked wi-fi. deviceusetrigger does not support networked wi-fi system triggers do not support network wi-fi
IDeviceIOControl deviceservicingtrigger supports ideviceiocontrol. deviceusetrigger does not support ideviceiocontrol system triggers do not support ideviceiocontrol

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

La aplicación realizará 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>

Uso del dispositivo con tareas en segundo plano del dispositivo

Para desarrollar la aplicación para aprovechar las tareas en segundo plano DeviceUseTrigger y DeviceServicingTrigger, siga este conjunto básico de pasos. Para obtener más información sobre las tareas en segundo plano, consulte 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 ha registrado previamente y, si no es así, la registra en el desencadenador del dispositivo. Tenga en cuenta que 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 ejecutará con una prioridad reducida para mantener la capacidad de respuesta de las aplicaciones en primer plano.

  6. A continuación, Windows validará, en función del tipo de desencadenador, que se hayan cumplido 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 recibirá estos eventos a través de los eventos de progreso y finalizados 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 mediante programación tareas en segundo plano que usan DeviceUseTrigger y DeviceServicingTrigger se introdujo en Windows 8.1 y se limita solo a las tareas en segundo plano del dispositivo.

  • Windows aplica ciertas directivas para garantizar el consentimiento del usuario al actualizar sus dispositivos periféricos. Se aplican directivas adicionales 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 de pared). 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.

Al usar DeviceUseTrigger o DeviceServicingTrigger, Windows 8.1 aplica directivas para asegurarse de que el usuario ha concedido 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.

device sync user consent message dialog.

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

device sync permissions setting dialog.

A diferencia de las tareas que usan DeviceUseTrigger, las tareas en segundo plano que usan la tarea en segundo plano DeviceServicingTrigger requieren el consentimiento del usuario cada vez que se desencadena la tarea en segundo plano. Y este consentimiento no se almacena como en el caso de DeviceUseTrigger. Esto se debe a las operaciones de mayor riesgo que conllevan las actualizaciones del firmware de los dispositivos y al mayor tiempo necesario para actualizarlos. Además de obtener el consentimiento del usuario, Windows proporcionará a los usuarios información sobre las actualizaciones del dispositivo, como una advertencia para mantener el dispositivo conectado a lo largo de la actualización y asegurarse de que el equipo se carga, y el tiempo de ejecución aproximado de la operación (si la aplicación lo proporciona).

device update user consent message dialog.

Restricciones de frecuencia y primer plano

No hay ninguna restricción en cuanto a 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 que utilice DeviceUseTrigger o DeviceServicingTrigger. Es importante tener en cuenta estos requisitos de directiva al usar tareas en segundo plano de dispositivos para interactuar con el dispositivo periférico.

Directivas de inicio de tareas

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

Directiva DeviceServicingTrigger DeviceUseTrigger
La aplicación para UWP está en primer plano al desencadenar la tarea en segundo plano. policy applies. policy applies
El dispositivo está conectado al sistema (o dentro del rango para un dispositivo inalámbrico). policy applies. policy applies
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. policy applies. policy applies
La aplicación puede acceder al dispositivo 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. policy applies. policy applies
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. policy applies. policy applies
El usuario ha concedido permiso de tarea para continuar. Cada vez. La primera vez, luego controlada por los permisos de la aplicación.
La estimación de tiempo proporcionada por la aplicación es inferior a 30 minutos. policy applies. policy does not apply
La aplicación se especifica como la aplicación con privilegios para el dispositivo. (Debe haber una coincidencia de identificador de aplicación completa con la lista de aplicaciones con privilegios en los metadatos del dispositivo del contenedor de dispositivos). policy applies. policy does not apply
Al equipo le queda más de un 33% de capacidad de batería o está conectado a CA. policy applies. policy does not apply
Solo se ejecuta una tarea en segundo plano del dispositivo por tipo de operación. policy check applies. policy applies

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 en tiempo de ejecución deja de ser true, Windows cancelará la tarea en segundo plano del dispositivo.

En esta tabla se indica qué directivas de tiempo de ejecución se aplican a cada desencadenador de tarea 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 para un dispositivo inalámbrico). policy does not apply. policy check applies
La tarea realiza E/S normal en el dispositivo (1 E/S cada 5 segundos). policy does not apply. policy check applies
La aplicación no ha cancelado la tarea. policy check applies. policy check applies
La aplicación no se ha cerrado. policy check applies. policy check applies

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 controladores de eventos de progreso y finalización al desencadenador. Cuando la aplicación vuelva de la suspensión, Windows proporcionará a la aplicación los eventos de progreso o finalización en cola que se pueden usar para determinar el estado de las 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 finalice una tarea, anule el registro de la tarea en segundo plano. Cuando finalice la tarea en segundo plano, puede anular el registro de las tareas en segundo plano y volver a abrir el dispositivo y usarlo con regularidad desde la aplicación para UWP.

  6. Regístrese para eventos de cancelación desde la clase de tareas en segundo plano. Registrarse para eventos de cancelación permitirá que el código de la tarea en segundo plano detenga limpiamente la tarea en segundo plano en ejecución cuando Windows o la aplicación en primer plano la cancelen.

  7. Al salir de la aplicación (no cuando esté en suspensión), anule el registro y cancele las tareas en ejecución.

    • Al salir de la aplicación, anule el registro y cancele las tareas en ejecución.

    • Al salir de la aplicación, las tareas en segundo plano se cancelarán y los controladores de eventos existentes se desconectarán 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 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 está ejecutando en segundo plano desde la aplicación en primer plano, use el método Unregister en el objeto BackgroundTaskRegistration que usa 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 hará que la infraestructura de tareas en segundo plano cancele la tarea en segundo plano.

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

Creación de una tarea en segundo plano del dispositivo

Ejemplo de dispositivo USB personalizado

Launching, resuming, and multitasking

Compatibilidad con la aplicación con tareas en segundo plano