Creare e registrare un'attività in background in-process

API importanti

Questo argomento illustra come creare e registrare un'attività in background che viene eseguita nello stesso processo dell'app.

Le attività in background in-process sono più semplici da implementare rispetto alle attività in background out-of-process. Tuttavia, sono meno resilienti. Se il codice in esecuzione in un'attività in background in-process si arresta in modo anomalo, l'app verrà arrestata. Si noti anche che DeviceUseTrigger, DeviceServicingTrigger e IoTStartupTask non possono essere usati con il modello in-process. Anche l'attivazione di un'attività in background VoIP all'interno dell'applicazione non è possibile. Questi trigger e attività sono ancora supportati usando il modello di attività in background out-of-process.

Tenere presente che l'attività in background può essere terminata anche quando viene eseguita all'interno del processo in primo piano dell'app se viene eseguito oltre i limiti di tempo di esecuzione. Per alcuni scopi è ancora utile la resilienza di separare il lavoro in un'attività in background eseguita in un processo separato. Mantenere il lavoro in background come attività separata dall'applicazione in primo piano potrebbe essere l'opzione migliore per il lavoro che non richiede la comunicazione con l'applicazione in primo piano.

Nozioni fondamentali

Il modello in-process migliora il ciclo di vita dell'applicazione con notifiche migliorate quando l'app è in primo piano o in background. Due nuovi eventi sono disponibili dall'oggetto Application per queste transizioni: EnteredBackground e LeavingBackground. Questi eventi rientrano nel ciclo di vita dell'applicazione in base allo stato di visibilità dell'applicazione. Altre informazioni su questi eventi e su come influiscono sul ciclo di vita dell'applicazione nel ciclo di vita dell'app.

A livello generale, gestirai l'evento EnteredBackground per eseguire il codice in esecuzione mentre l'app è in esecuzione in background e gestirai LeavingBackground per sapere quando l'app è stata spostata in primo piano.

Registrare il trigger dell'attività in background

L'attività in background in-process viene registrata in modo analogo all'attività in background out-of-process. Tutti i trigger in background iniziano con la registrazione usando BackgroundTaskBuilder. Il generatore semplifica la registrazione di un'attività in background impostando tutti i valori necessari in un'unica posizione:

var builder = new BackgroundTaskBuilder();
builder.Name = "My Background Trigger";
builder.SetTrigger(new TimeTrigger(15, true));
// Do not set builder.TaskEntryPoint for in-process background tasks
// Here we register the task and work will start based on the time trigger.
BackgroundTaskRegistration task = builder.Register();

Nota

Le app Universal Windows devono chiamare RequestAccessAsync prima di registrare uno dei tipi di trigger in background. Per assicurarsi che l'app di Universal Windows continui a funzionare correttamente dopo il rilascio di un aggiornamento, è necessario 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.

Per le attività in background in-process non impostare TaskEntryPoint. Lasciare il campo vuoto abilita il punto di ingresso predefinito, un nuovo metodo protetto nell'oggetto Application denominato OnBackgroundActivated().

Una volta registrato un trigger, verrà generato in base al tipo di trigger impostato nel metodo SetTrigger. Nell'esempio precedente viene usato un TimeTrigger, che verrà generato quindici minuti dal momento in cui è stato registrato.

Aggiungere una condizione per controllare quando l'attività verrà eseguita (facoltativo)

È possibile aggiungere una condizione per controllare quando l'attività verrà eseguita dopo che si verifica l'evento trigger. Ad esempio, se non vuoi che l'attività venga eseguita finché l'utente non è presente, utilizza la condizione UserPresent. Per un elenco delle possibili condizioni, vedere SystemConditionType.

Il codice di esempio seguente assegna una condizione che richiede che l'utente sia presente:

builder.AddCondition(new SystemCondition(SystemConditionType.UserPresent));

Inserire il codice dell'attività in background in OnBackgroundActivated()

Inserire il codice dell'attività in background in OnBackgroundActivated per rispondere al trigger in background quando viene attivato. OnBackgroundActivated può essere considerato come IBackgroundTask.Run. Il metodo ha un parametro BackgroundActivatedEventArgs, che contiene tutti gli elementi forniti dal metodo Run . Ad esempio, in App.xaml.cs:

using Windows.ApplicationModel.Background;

...

sealed partial class App : Application
{
  ...

  protected override void OnBackgroundActivated(BackgroundActivatedEventArgs args)
  {
      base.OnBackgroundActivated(args);
      IBackgroundTaskInstance taskInstance = args.TaskInstance;
      DoYourBackgroundWork(taskInstance);  
  }
}

Per un esempio più completo di OnBackgroundActivated, vedere Convertire un servizio app per l'esecuzione nello stesso processo dell'app host.

Gestire lo stato di avanzamento e il completamento delle attività in background

L'avanzamento e il completamento delle attività possono essere monitorati allo stesso modo delle attività in background multi-processo (vedere Monitorare lo stato e il completamento dell'attività in background), ma probabilmente si noterà che è possibile monitorare più facilmente usando le variabili per tenere traccia dello stato di avanzamento o di completamento nell'app. Questo è uno dei vantaggi offerti dal codice dell'attività in background in esecuzione nello stesso processo dell'app.

Gestire l'annullamento delle attività in background

Le attività in background in-process vengono annullate allo stesso modo delle attività in background out-of-process (vedere Gestire un'attività in background annullata). Tenere presente che il gestore eventi BackgroundActivated deve uscire prima che si verifichi l'annullamento oppure l'intero processo verrà terminato. Se l'app in primo piano si chiude inaspettatamente quando annulli l'attività in background, verifica che il gestore sia uscito prima dell'annullamento.

Il manifesto

A differenza delle attività in background out-of-process, non è necessario aggiungere informazioni sulle attività in background al manifesto del pacchetto per eseguire attività in background in-process.

Riepilogo e passaggi successivi

È ora necessario comprendere le nozioni di base su come scrivere un'attività in background in-process.

Vedere gli argomenti correlati seguenti per informazioni di riferimento sulle API, indicazioni concettuali sulle attività in background e istruzioni più dettagliate per la scrittura di app che usano attività in background.

Argomenti dettagliati relativi alle istruzioni per le attività in background

Linee guida per attività in background

Informazioni di riferimento sulle API delle attività in background