Sincronizzazione e aggiornamento dei dispositivi per le app dello Store in Windows 8.1

In Windows 8.1 l'app UWP può usare un'attività in background del dispositivo per sincronizzare i dati nel dispositivo periferico. Se l'app è associata ai metadati del dispositivo, l'app per dispositivi UWP può anche usare un agente in background del dispositivo per eseguire gli aggiornamenti del dispositivo, ad esempio gli aggiornamenti del firmware. Gli agenti in background del dispositivo sono soggetti a criteri che garantiscono il consenso dell'utente e consentono di mantenere la durata della batteria durante la sincronizzazione e l'aggiornamento dei dispositivi.

Per eseguire operazioni di sincronizzazione e aggiornamento dei dispositivi, creare un'attività in background del dispositivo che usa rispettivamente DeviceUseTrigger e DeviceServicingTrigger. Per informazioni su come questa operazione viene eseguita con l'esempio di dispositivo USB personalizzato, vedere Creazione di un'attività in background del dispositivo.

Nota

Le API del dispositivo Windows Runtime non richiedono metadati del dispositivo. Ciò significa che la tua app non deve essere un'app per dispositivi UWP per usarla. Le app UWP possono usare queste API per accedere a USB, human interface devices (HID), dispositivi Bluetooth e altro ancora. Per altre info, vedi Integrazione dei dispositivi.

Panoramica delle attività in background del dispositivo

Quando gli utenti spostano l'app UWP fuori schermo, Windows sospende l'app in memoria. In questo modo un'altra app ha il primo piano. Quando un'app viene sospesa, si trova in memoria e Windows l'ha arrestata per l'esecuzione. In questo caso, senza l'aiuto di un'attività in background del dispositivo, le operazioni in corso del dispositivo, ad esempio la sincronizzazione e l'aggiornamento, verranno interrotte. Windows 8.1 offre due nuovi trigger di attività in background che consentono all'app di eseguire operazioni di sincronizzazione e aggiornamento a esecuzione prolungata sul dispositivo periferico in modo sicuro in background, anche se l'app è sospesa: DeviceUseTrigger e DeviceServicingTrigger. Per altre info sulla sospensione dell'app, vedi Avvio, ripresa e multitasking.

Trigger attività in background Richiede metadati del dispositivo Descrizione
DeviceUseTrigger No Abilita le operazioni di sincronizzazione a esecuzione prolungata da o verso il dispositivo periferico mentre l'app è sospesa. La sincronizzazione del dispositivo in background richiede che l'utente abbia approvato la sincronizzazione in background da parte dell'app. Il dispositivo deve anche essere connesso o associato al PC, con I/O attivo ed è consentito un massimo di 10 minuti di attività in background. Altri dettagli sull'applicazione dei criteri sono descritti più avanti in questo argomento.
DeviceServicingTrigger consente di aggiornare i dispositivi a esecuzione prolungata, ad esempio i trasferimenti di impostazioni o gli aggiornamenti del firmware, mentre l'app è sospesa. L'aggiornamento del dispositivo in background richiede l'approvazione dell'utente ogni volta che viene usata l'attività in background. A differenza dell'attività in background DeviceUseTrigger, l'attività in background DeviceServicingTrigger consente il riavvio e la disconnessione del dispositivo e consente un massimo di 30 minuti di attività in background. Altri dettagli sull'applicazione dei criteri sono descritti più avanti in questo argomento.

DeviceServicingTrigger richiede metadati del dispositivo perché l'app deve essere specificata come app con privilegi per eseguire operazioni di aggiornamento del dispositivo.

Privilegio dell'app

Alcune operazioni critiche del dispositivo, ad esempio gli aggiornamenti dei dispositivi a esecuzione prolungata, possono essere eseguite solo da un'app con privilegi. Un'app con privilegi è l'app che il produttore del dispositivo ha autorizzato a eseguire tali operazioni. I metadati del dispositivo specificano quale app, se presente, è stata designata come app con privilegi per un dispositivo.

Quando si creano i metadati del dispositivo con la procedura guidata dei metadati del dispositivo, specificare l'app nella pagina Specificare le informazioni sull'app per dispositivi UWP. Per altre info, vedi Passaggio 2: Creare metadati del dispositivo per l'app per dispositivi UWP.

Protocolli supportati

Le attività in background del dispositivo che usano DeviceUseTrigger e DeviceServicingTrigger consentono all'app di comunicare con dispositivi periferici su protocolli non supportati dalle attività attivate dal sistema usate in genere dalle app UWP.

Protocollo DeviceServicingTrigger DeviceUseTrigger Trigger di sistema
USB deviceservicingtrigger supports usb. deviceusetrigger supports usb system triggers do not support usb
NASCOSTO deviceservicingtrigger supports hid. deviceusetrigger supports hid system triggers do not support hid
RFCOMM Bluetooth 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
Rete cablata deviceservicingtrigger supports network wired. deviceusetrigger does not support network wired system triggers do not support network wired
Rete 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

Registrazione delle attività in background nel manifesto del pacchetto dell'app

L'app eseguirà operazioni di sincronizzazione e aggiornamento nel codice che viene eseguito come parte di un'attività in background. Questo codice è incorporato in una classe Windows Runtime che implementa IBackgroundTask (o in una pagina JavaScript dedicata per le app JavaScript). Per usare un'attività in background del dispositivo, l'app deve dichiararla nel file manifesto dell'app di un'app in primo piano, come avviene per le attività in background attivate dal sistema.

In questo esempio di un file manifesto del pacchetto dell'app, DeviceLibrary.SyncContent e DeviceLibrary.UpdateFirmware sono punti di ingresso dell'app in primo piano. DeviceLibrary.SyncContent è il punto di ingresso per l'attività in background che usa DeviceUseTrigger. DeviceLibrary.UpdateFirmware è il punto di ingresso per l'attività in background che 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 le attività in background del dispositivo

Per sviluppare la tua app per sfruttare i vantaggi delle attività in background DeviceUseTrigger e DeviceServicingTrigger, segui questo set di passaggi di base. Per altre info sulle attività in background, vedi Supporto dell'app con attività in background.

  1. L'app registra l'attività in background nel manifesto dell'app e incorpora il codice dell'attività in background in una classe Windows Runtime che implementa IBackgroundTask o in una pagina JavaScript dedicata per le app JavaScript.

  2. All'avvio dell'app, creerà e configurerà un oggetto trigger del dispositivo del tipo appropriato, DeviceUseTrigger o DeviceServicingTrigger e archivierà l'istanza del trigger per un uso futuro.

  3. L'app controlla se l'attività in background è stata registrata in precedenza e, in caso contrario, la registra sul trigger del dispositivo. Tieni presente che l'app non è autorizzata a impostare condizioni per l'attività associata a questo trigger.

  4. Quando l'app deve attivare l'attività in background, chiama il metodo di attivazione RequestAsync nell'oggetto trigger del dispositivo.

  5. L'attività in background non è limitata come altre attività in background del sistema (non esiste alcuna quota di tempo cpu), ma verrà eseguita con priorità ridotta per mantenere reattive le app in primo piano.

  6. Windows convaliderà quindi, in base al tipo di trigger, che i criteri necessari sono stati soddisfatti, inclusa la richiesta del consenso dell'utente per l'operazione prima di avviare l'attività in background.

  7. Windows monitora le condizioni di sistema e il runtime delle attività e, se necessario, annulla l'attività se le condizioni richieste non vengono più soddisfatte.

  8. Quando le attività in background segnalano lo stato o il completamento, l'app riceverà questi eventi tramite lo stato di avanzamento e gli eventi completati nell'attività registrata.

Punti importanti da considerare quando si usano le attività in background del dispositivo

  • La possibilità di attivare attività in background a livello di codice che usano DeviceUseTrigger e DeviceServicingTrigger è stata introdotta in Windows 8.1 ed è limitata solo alle attività in background del dispositivo.

  • Alcuni criteri vengono applicati da Windows per garantire il consenso dell'utente durante l'aggiornamento dei dispositivi periferici. I criteri aggiuntivi vengono applicati per mantenere la durata della batteria dell'utente durante la sincronizzazione e l'aggiornamento dei dispositivi periferici.

  • Le attività in background che usano DeviceUseTrigger e DeviceServicingTrigger potrebbero essere annullate da Windows quando determinati requisiti dei criteri non vengono più soddisfatti, inclusa una quantità massima di tempo in background (tempo di clock reale). È importante considerare questi requisiti dei criteri quando si usano queste attività in background per interagire con il dispositivo periferico.

Suggerimento

Per vedere come funzionano queste attività in background, scaricare un esempio. L'esempio di dispositivo USB personalizzato illustra un'attività in background che esegue la sincronizzazione del dispositivo con DeviceUseTrigger.

Quando si usa DeviceUseTrigger o DeviceServicingTrigger, Windows 8.1 applica i criteri per assicurarsi che l'utente abbia concesso all'app l'autorizzazione per accedere al dispositivo in background per la sincronizzazione e l'aggiornamento del contenuto. I criteri vengono applicati anche per mantenere la durata della batteria dell'utente durante la sincronizzazione e l'aggiornamento dei dispositivi periferici.

Un'attività in background che usa DeviceUseTrigger richiede un consenso utente monouso che consente alla tua app di eseguire la sincronizzazione in background. Questo consenso viene archiviato per app e modello per dispositivo. L'utente acconsente a consentire all'app di accedere al dispositivo in background proprio come per consentire all'app di accedere al dispositivo quando l'app è in primo piano.

Nell'esempio seguente un'app denominata Tailspin Toys ottiene l'autorizzazione utente per la sincronizzazione in background.

device sync user consent message dialog.

Se gli utenti cambiano idea in un secondo momento, possono revocare le autorizzazioni in Impostazioni.

device sync permissions setting dialog.

A differenza di quelli che usano DeviceUseTrigger, le attività in background che usano l'attività in background DeviceServicingTrigger richiedono il consenso dell'utente ogni volta che viene attivata l'attività in background. E questo consenso non viene archiviato come per DeviceUseTrigger. Ciò è dovuto alle operazioni a rischio più elevato coinvolte negli aggiornamenti del firmware del dispositivo e alla quantità di tempo necessaria per gli aggiornamenti del dispositivo. Oltre a ottenere il consenso dell'utente, Windows fornirà agli utenti informazioni sugli aggiornamenti dei dispositivi, ad esempio un avviso per mantenere il dispositivo connesso durante l'aggiornamento e assicurarsi che il PC venga addebitato e il tempo di esecuzione approssimativo dell'operazione (se l'app lo fornisce).

device update user consent message dialog.

Restrizioni relative alla frequenza e al primo piano

Non esiste alcuna restrizione sulla frequenza con cui l'app può avviare operazioni, ma l'app può eseguire solo un'operazione di attività in background DeviceUseTrigger o DeviceServicingTrigger alla volta (questo non influisce su altri tipi di attività in background) e può avviare un'attività in background solo mentre l'app è in primo piano. Quando l'app non è in primo piano, non è possibile avviare un'attività in background con DeviceUseTrigger o DeviceServicingTrigger. L'app non può avviare una seconda attività in background del dispositivo prima del completamento della prima attività in background.

Criteri delle attività in background del dispositivo

Windows applica i criteri quando l'app usa un'attività in background del dispositivo. Se questi criteri non vengono soddisfatti, l'attività in background che usa DeviceUseTrigger o DeviceServicingTrigger potrebbe essere annullata. È importante considerare questi requisiti dei criteri quando si usano le attività in background del dispositivo per interagire con il dispositivo periferico.

Criteri di avvio delle attività

Questa tabella indica quali criteri di avvio delle attività si applicano a ogni trigger di attività in background.

Criteri DeviceServicingTrigger DeviceUseTrigger
L'app UWP è in primo piano quando si attiva l'attività in background. policy applies. policy applies
Il dispositivo è collegato al sistema (o nell'intervallo per un dispositivo wireless). policy applies. policy applies
L'attività in background utilizza 400 ms di tempo cpu (presupponendo una CPU a 1GHz) ogni minuto quando lo schermo è bloccato o ogni 5 minuti quando lo schermo non è bloccato. Il mancato rispetto di questo criterio può comportare l'annullamento dell'attività. policy applies. policy applies
Il dispositivo è accessibile all'app usando le API periferiche del dispositivo (le API di Windows Runtime per USB, HID, Bluetooth e così via). Se l'app non riesce ad accedere al dispositivo, l'accesso alle attività in background viene negato. policy applies. policy applies
Il punto di ingresso dell'attività in background fornito dall'app viene registrato nel manifesto del pacchetto dell'app. policy applies. policy applies
L'utente ha concesso all'attività l'autorizzazione per continuare. Ogni volta. Prima volta, quindi controllato dalle autorizzazioni dell'app.
La stima del tempo fornita dall'app è inferiore a 30 minuti. policy applies. policy does not apply
L'app viene specificata come app con privilegi per il dispositivo. Deve essere presente una corrispondenza completa dell'ID app rispetto all'elenco di app con privilegi nei metadati del dispositivo del contenitore di dispositivi. policy applies. policy does not apply
Il computer ha una capacità superiore al 33% della batteria rimanente o è in alimentazione AC. policy applies. policy does not apply
Solo un'attività in background del dispositivo è in esecuzione per ogni tipo di operazione. policy check applies. policy applies

Controlli dei criteri di runtime

Windows applica i requisiti dei criteri di runtime seguenti mentre l'attività è in esecuzione in background. Se uno dei requisiti di runtime smette di essere true, Windows annulla l'attività in background del dispositivo.

Questa tabella indica quali criteri di runtime si applicano a ogni trigger di attività in background.

Controllo dei criteri DeviceServicingTrigger DeviceUseTrigger
Limite di tempo in tempo reale: la quantità totale di tempo per l'esecuzione dell'attività dell'app in background. 30 minuti 10 minuti
Il dispositivo è collegato al sistema (o nell'intervallo per un dispositivo wireless). policy does not apply. policy check applies
L'attività esegue normali operazioni di I/O sul dispositivo (1 I/O ogni 5 secondi). policy does not apply. policy check applies
L'app non ha annullato l'attività. policy check applies. policy check applies
L'app non è stata chiusa. policy check applies. policy check applies

Procedure consigliate

Di seguito sono riportate le procedure consigliate per le app per dispositivi UWP che usano le attività in background del dispositivo.

Modello di programmazione delle attività in background del dispositivo

L'uso delle attività in background DeviceUseTrigger o DeviceServicingTrigger dall'app garantisce che tutte le operazioni di sincronizzazione o aggiornamento del dispositivo avviate dall'app in primo piano continuino a essere eseguite in background se gli utenti cambiano app e l'app in primo piano viene sospesa da Windows. È consigliabile seguire questo modello complessivo per la registrazione, l'attivazione e l'annullamento della registrazione delle attività in background:

  1. Registrare l'attività in background prima di richiedere il trigger.

  2. Connessione i gestori eventi di avanzamento e completamento al trigger. Quando l'app torna dalla sospensione, Windows fornirà all'app tutti gli eventi di avanzamento o completamento in coda che possono essere usati per determinare lo stato delle attività in background.

  3. Chiudere tutti gli oggetti dispositivo aperti quando si attivano le attività in background DeviceUseTrigger o DeviceServicingTrigger in modo che tali dispositivi siano liberi di essere aperti e usati dall'attività in background.

  4. Registrare il trigger.

  5. Al termine di un'attività, annullare la registrazione dell'attività in background. Al termine dell'attività in background, puoi annullare la registrazione delle attività in background e riaprire il dispositivo e usarlo regolarmente dall'app UWP.

  6. Eseguire la registrazione per gli eventi di annullamento dalla classe dell'attività in background. La registrazione per gli eventi di annullamento consentirà al codice dell'attività in background di arrestare in modo pulito l'attività in background in esecuzione quando viene annullata da Windows o dall'app in primo piano.

  7. All'uscita dell'app (non sospensione), annullare la registrazione e annullare le attività in esecuzione.

    • Quando l'app viene chiusa, annullare la registrazione e annullare le attività in esecuzione.

    • Quando l'app viene chiusa, le attività in background verranno annullate e tutti i gestori eventi esistenti verranno disconnessi dalle attività in background esistenti. Ciò impedisce di determinare lo stato delle attività in background. L'annullamento della registrazione e l'annullamento dell'attività in background consentirà al codice di annullamento di arrestare correttamente le attività in background.

Suggerimento

Per una descrizione dettagliata di come questa operazione viene eseguita con l'esempio di dispositivo USB personalizzato, vedere Creazione di un'attività in background del dispositivo.

Annullamento di un'attività in background

Per annullare un'attività in esecuzione in background dall'app in primo piano, usa il metodo Unregister nell'oggetto BackgroundTaskRegistration usato nell'app per registrare l'attività in background DeviceUseTrigger o DeviceServicingTrigger . L'annullamento della registrazione dell'attività in background tramite il metodo Unregister in BackgroundTaskRegistration causerà l'annullamento dell'attività in background da parte dell'infrastruttura delle attività in background.

Il metodo Unregister accetta inoltre un valore booleano true o false per indicare se le istanze attualmente in esecuzione dell'attività in background devono essere annullate senza consentirne il completamento. Per altre info, vedi le informazioni di riferimento sulle API per BackgroundTaskRegistration.Unregister.

Creazione di un'attività in background del dispositivo

Esempio di dispositivo USB personalizzato

Launching, resuming, and multitasking

Supporto dell'app con attività in background