Supportare l’app con le attività in background

Negli argomenti di questa sezione viene illustrato come eseguire codice leggero in background in risposta a trigger. Si possono usare attività in background per fornire funzionalità quando l'app viene sospesa o non è in esecuzione. È anche possibile usare attività in background per app di comunicazione in tempo reale, ad esempio VOIP, posta elettronica e messaggistica istantanea.

Riproduzione di elementi multimediali in background

A partire da Windows 10 versione 1607, la riproduzione di audio in background è molto più semplice. Per maggiori informazioni, vedere Riprodurre elementi multimediali in background.

Attività in background in-process e out-of-process

Esistono due approcci per implementare le attività in background:

  • In-process: l'app e il relativo processo in background vengono eseguiti nello stesso processo
  • Out-of-process: l'app e il processo in background vengono eseguiti in processi separati.

Il supporto in background in-process è stato introdotto in Windows 10, versione 1607, per semplificare la scrittura di attività in background. Tuttavia, è comunque possibile scrivere attività in background out-of-process. Vedere Linee guida per le attività in background per consigli su quando scrivere un'attività in background in-process rispetto a un'attività in background out-of-process.

Le attività in background out-of-process sono più resilienti perché il processo in background non può arrestare il processo dell'app in caso di errore. Tuttavia, la resilienza è al prezzo di una maggiore complessità per gestire la comunicazione tra processi tra l'app e l'attività in background.

Le attività in background out-of-process vengono implementate come classi leggere che implementano l'interfaccia IBackgroundTask eseguita dal sistema operativo in un processo separato (backgroundtaskhost.exe). Registrare un'attività in background usando la classe BackgroundTaskBuilder. Il nome della classe viene usato per specificare il punto di ingresso durante la registrazione dell'attività in background.

In Windows 10 versione 1607 è possibile abilitare l'attività in background senza creare un'attività in background. È invece possibile eseguire il codice in background direttamente all'interno del processo dell'applicazione in primo piano.

Per iniziare rapidamente a usare le attività in background in-process, vedere Creare e registrare un'attività in background in-process.

Per iniziare rapidamente a usare le attività in background out-of-process, vedere Creare e registrare un'attività in background out-of-process.

Suggerimento

 A partire da Windows 10, non è più necessario inserire un'app nella schermata di blocco come prerequisito per la registrazione di un'attività in background.

Attività in background per gli eventi di sistema

L'app può rispondere agli eventi generati dal sistema registrando un'attività in background con la classe SystemTrigger. Un'app può usare uno dei trigger di eventi di sistema seguenti (definiti in SystemTriggerType)

Nome trigger Descrizione
InternetAvailable Internet diventa disponibile.
NetworkStateChange Si verifica una modifica di rete, ad esempio una modifica del costo o della connettività.
OnlineId Connessione edStateChange ID online associato alle modifiche dell'account.
SmsReceived Un nuovo messaggio SMS viene ricevuto da un dispositivo mobile broadband installato.
TimeZoneChange Il fuso orario cambia nel dispositivo (ad esempio, quando il sistema regola l'orologio per l'ora legale).

Per maggiori informazioni, vedere Rispondere agli eventi di sistema con attività in background.

Condizioni per le attività in background

È possibile controllare quando viene eseguita l'attività in background, anche dopo l'attivazione, aggiungendo una condizione. Dopo l'attivazione, un'attività in background non viene eseguita fino a quando non vengono soddisfatte tutte le relative condizioni. È possibile utilizzare le condizioni seguenti (rappresentate dall'enumerazione SystemConditionType).

Nome condizione Descrizione
InternetAvailable Internet deve essere disponibile.
InternetNotAvailable Internet deve essere non disponibile.
SessionConnected La sessione deve essere connessa.
SessionDisconnected La sessione deve essere disconnessa.
UserNotPresent L'utente deve essere lontano.
UserPresent L'utente deve essere presente.

Aggiungere la condizione InternetAvailable all'attività in background BackgroundTaskBuilder.AddCondition per ritardare l'attivazione dell'attività in background finché lo stack di rete è in esecuzione. Questa condizione consente di risparmiare energia perché l'attività in background non verrà eseguita finché la rete è disponibile. Questa condizione non fornisce l'attivazione in tempo reale.

Se l'attività in background richiede connessione di rete, impostare IsNetworkRequested per l'attività in background per assicurarsi che la rete rimanga attiva durante l'esecuzione dell'attività in background. In questo modo, l'infrastruttura delle attività in background mantiene sempre attiva la rete mentre l'attività è in esecuzione, anche se il dispositivo si trova in modalità Standby connesso. Se l'attività in background non imposta IsNetworkRequested, l'attività in background non sarà in grado di accedere alla rete se è attiva la modalità Standby connesso (ad esempio, quando lo schermo del telefono è spento). Per maggiori informazioni sulle condizioni delle attività in background, vedere Impostare le condizioni per l'esecuzione di un'attività in background.

Requisiti del manifesto dell'applicazione

Prima che l'app possa registrare correttamente un'attività in background out-of-process, deve essere dichiarata nel manifesto dell'applicazione. Le attività in background eseguite nello stesso processo dell'app host non devono essere dichiarate nel manifesto dell'applicazione. Per maggiori informazioni, vedere Dichiarare le attività in background nel manifesto dell'applicazione.

Attività in background

I trigger in tempo reale seguenti possono essere usati per eseguire codice personalizzato leggero in background:

Trigger in tempo reale Descrizione
Canale di controllo Le attività in background possono mantenere attiva una connessione e ricevere messaggi nel canale di controllo usando ControlChannelTrigger. Se l'app è in ascolto di un socket, è possibile usare Socket Broker anziché ControlChannelTrigger. Per altri dettagli sull'uso di Socket Broker, vedere SocketActivityTrigger. ControlChannelTrigger non è supportato in Windows Phone.
Timer Le attività in background possono essere eseguite ogni 15 minuti e possono essere impostate per l'esecuzione in un determinato momento usando TimeTrigger. Per altre informazioni, vedere Eseguire un'attività in background in un timer.
Notifica push Le attività in background rispondono a PushNotificationTrigger per ricevere notifiche push non elaborate.

Nota  

Le app Universal Windows devono chiamare RequestAccessAsync prima di registrare uno dei tipi di trigger in background.

Per assicurarsi che l'app di Windows universale continui a funzionare correttamente dopo il rilascio di un aggiornamento, chiamare RemoveAccess e quindi chiamare RequestAccessAsync quando l'app viene avviata dopo essere stata aggiornata. Per maggiori informazioni, vedere Linee guida per le attività in background.

Limiti al numero di istanze di trigger: esistono limiti al numero di istanze di alcuni trigger che un'app può registrare. Un'app può registrare ApplicationTrigger, MediaProcessingTrigger e DeviceUseTrigger una sola volta per ogni istanza dell'app. Se un'app supera questo limite, la registrazione genera un'eccezione.

Trigger di eventi di sistema

L'enumerazione SystemTriggerType rappresenta i trigger di evento di sistema seguenti:

Nome trigger Descrizione
UserPresent L'attività in background viene attivata quando l'utente diventa presente.
UserAway L'attività in background viene attivata quando l'utente diventa assente.
ControlChannelReset L'attività in background viene attivata quando viene reimpostato un canale di controllo.
SessionConnected L'attività in background viene attivata quando la sessione è connessa.

  L'evento di sistema seguente attiva il segnale quando l'utente ha spostato un'app nella schermata di blocco o fuori.

Nome trigger Descrizione
LockScreenApplicationAdded Un riquadro dell'app viene aggiunto alla schermata di blocco.
LockScreenApplicationRemoved Un riquadro dell'app viene rimosso dalla schermata di blocco.

 

Vincoli delle risorse delle attività in background

Le attività in background sono leggere. Mantenere al minimo l'esecuzione in background garantisce la migliore esperienza utente con app in primo piano e durata della batteria. Questa operazione viene eseguita applicando vincoli di risorse alle attività in background.

Le attività in background sono limitate a 30 secondi di utilizzo dell'orologio a parete.

Vincoli di memoria

A causa dei vincoli di risorse per i dispositivi a memoria insufficiente, le attività in background possono avere un limite di memoria che determina la quantità massima di memoria che può essere usata dall'attività in background. Se l'attività in background tenta un'operazione che supererebbe questo limite, l'operazione avrà esito negativo e potrebbe generare un'eccezione di memoria insufficiente, che l'attività può gestire. Se l'attività non gestisce l'eccezione di memoria insufficiente o la natura dell'operazione tentata è tale che non sia stata generata un'eccezione di memoria insufficiente, l'attività verrà terminata immediatamente.

È possibile usare le API MemoryManager per eseguire query sull'utilizzo e il limite di memoria correnti per individuare il limite massimo (se presente) e monitorare l'utilizzo continuo della memoria dell'attività in background.

Limite per dispositivo per app con attività in background per dispositivi con memoria insufficiente

Nei dispositivi con vincoli di memoria è previsto un limite al numero di app che è possibile installare in un dispositivo e usare le attività in background in qualsiasi momento. Se questo numero viene superato, il richiamo di RequestAccessAsync, necessario per registrare tutte le attività in background, avrà esito negativo.

Risparmio batteria

A meno che non si esegua l'app in modo che possa comunque eseguire attività in background e ricevere notifiche push quando il risparmio batteria è attivo, la funzionalità Risparmio batteria, se abilitata, impedirà l'esecuzione delle attività in background quando il dispositivo non è connesso all'alimentazione esterna e la batteria scende al di sotto di una quantità specificata di energia rimanente. Ciò non impedirà di registrare le attività in background.

Tuttavia, per le app aziendali e le app che non verranno pubblicate in Microsoft Store, vedere Eseguire in background per un periodo illimitato per imparare a usare le funzionalità per eseguire un'attività in background o una sessione di esecuzione estesa in background per un tempo illimitato.

Garanzie delle risorse delle attività in background per la comunicazione in tempo reale

Per impedire che le quote delle risorse interferiscano con la funzionalità di comunicazione in tempo reale, le attività in background che usano ControlChannelTrigger e PushNotificationTrigger ricevono quote di risorse CPU garantite per ogni attività in esecuzione. Le quote di risorse sono come indicato in precedenza e rimangono costanti per queste attività in background.

L'app non deve eseguire operazioni diverse per ottenere le quote di risorse garantite per le attività in background ControlChannelTrigger e PushNotificationTrigger. Il sistema li considera sempre come attività in background critiche.

Trigger di manutenzione

Le attività di manutenzione vengono eseguite solo quando il dispositivo è collegato all'alimentazione CA. Per maggiori informazioni, vedere Usare un trigger di manutenzione.

Attività in background per sensori e dispositivi

L'app può accedere ai sensori e ai dispositivi periferici da un'attività in background con la classe DeviceUseTrigger. È possibile usare questo trigger per operazioni a esecuzione prolungata, ad esempio la sincronizzazione o il monitoraggio dei dati. A differenza delle attività per gli eventi di sistema, un'attività DeviceUseTrigger può essere attivata solo mentre l'app è in esecuzione in primo piano e non è possibile impostare condizioni.

Importante

Non usare DeviceUseTrigger e DeviceServicingTrigger con le attività in background in-process.

Alcune operazioni critiche del dispositivo, ad esempio gli aggiornamenti del firmware a esecuzione prolungata, non possono essere eseguite con DeviceUseTrigger. ali operazioni possono essere eseguite solo sul PC e solo da un'app con privilegi che usa DeviceServicingTrigger. Un'app con privilegi è un'app autorizzata dal produttore del dispositivo a eseguire tali operazioni. I metadati del dispositivo vengono usati per specificare quale app, se presente, è stata designata come app con privilegi per un dispositivo. Per maggiori informazioni, vedere Sincronizzazione e aggiornamento dei dispositivi per le app di Microsoft Store

Gestione delle attività in background

Le attività in background possono segnalare lo stato di avanzamento, il completamento e l'annullamento all'app usando eventi e archiviazione locale. L'app può anche intercettare le eccezioni generate da un'attività in background e gestire la registrazione delle attività in background durante gli aggiornamenti dell'app. Per altre informazioni, vedere:

Gestire un'attività in background annullata
Monitorare lo stato di avanzamento e il completamento delle attività in background

Controllare la registrazione delle attività in background durante l'avvio dell'app. Assicurarsi che le attività in background non raggruppate dell'app siano presenti in BackgroundTaskBuilder.AllTasks. Registrare nuovamente quelle che non sono presenti. Annullare la registrazione di tutte le attività non più necessarie. Ciò garantisce che tutte le registrazioni delle attività in background siano aggiornate ogni volta che viene avviata l'app.

Linee guida concettuali per il multitasking in Windows 10

Indicazioni sulle attività in background correlate