Attivare un'attività in background dall'interno dell'app

Scopri come usare ApplicationTrigger per attivare un'attività in background dall'interno dell'app.

Per un esempio di come creare un trigger dell'applicazione, vedere questo esempio.

In questo argomento si presuppone che l'utente abbia un'attività in background da attivare da parte dell'applicazione. Se non si dispone già di un'attività in background, è disponibile un'attività in background di esempio in BackgroundActivity.cs. In alternativa, seguire la procedura descritta in Creare e registrare un'attività in background out-of-process per crearne una.

Perché usare un trigger di applicazione

Usare un ApplicationTrigger per eseguire il codice in un processo separato dall'app in primo piano. Un ApplicationTrigger è appropriato se l'app deve essere eseguita in background, anche se l'utente chiude l'app in primo piano. Se il lavoro in background deve essere interrotto quando l'app viene chiusa o deve essere associata allo stato del processo in primo piano, è consigliabile usare l''esecuzione estesa.

Crea un trigger dell'applicazione

Creare un nuovo ApplicationTrigger. È possibile archiviarlo in un campo così come viene fatto nel frammento di codice seguente. Ciò è utile in modo che non sia necessario creare una nuova istanza in un secondo momento quando si vuole segnalare il trigger. Tuttavia, è possibile usare qualsiasi istanza di ApplicationTrigger per segnalare il trigger.

// _AppTrigger is an ApplicationTrigger field defined at a scope that will keep it alive
// as long as you need to trigger the background task.
// Or, you could create a new ApplicationTrigger instance and use that when you want to
// trigger the background task.
_AppTrigger = new ApplicationTrigger();
// _AppTrigger is an ApplicationTrigger field defined at a scope that will keep it alive
// as long as you need to trigger the background task.
// Or, you could create a new ApplicationTrigger instance and use that when you want to
// trigger the background task.
Windows::ApplicationModel::Background::ApplicationTrigger _AppTrigger;
// _AppTrigger is an ApplicationTrigger field defined at a scope that will keep it alive
// as long as you need to trigger the background task.
// Or, you could create a new ApplicationTrigger instance and use that when you want to
// trigger the background task.
ApplicationTrigger ^ _AppTrigger = ref new ApplicationTrigger();

(Facoltativo) Aggiungere una condizione

È possibile creare una condizione dell'attività in background per controllare quando viene eseguita l'attività. Una condizione impedisce l'esecuzione dell'attività in background fino a quando non viene soddisfatta la condizione. Per altre informazioni, vedere Impostare le condizioni per l'esecuzione di un'attività in background.

In questo esempio la condizione è impostata su InternetAvailable in modo che, dopo l'attivazione, l'attività venga eseguita solo una volta che è disponibile l'accesso a Internet. Per un elenco delle possibili condizioni, vedere SystemConditionType.

SystemCondition internetCondition = new SystemCondition(SystemConditionType.InternetAvailable);
Windows::ApplicationModel::Background::SystemCondition internetCondition{
    Windows::ApplicationModel::Background::SystemConditionType::InternetAvailable };
SystemCondition ^ internetCondition = ref new SystemCondition(SystemConditionType::InternetAvailable)

Per informazioni più approfondite su condizioni e tipi di trigger in background, vedere Supportare l'app con le attività in background.

Call RequestAccessAsync()

Prima di registrare l'attività in background ApplicationTrigger, chiamare RequestAccessAsync per determinare il livello di attività in background consentito dall'utente perché l'utente potrebbe aver disattivato l'attività in background per l'app. Per maggiori informazioni sui modi in cui gli utenti possono controllare le impostazioni per l'attività in background, vedere Ottimizzare l'attività in background.

var requestStatus = await Windows.ApplicationModel.Background.BackgroundExecutionManager.RequestAccessAsync();
if (requestStatus != BackgroundAccessStatus.AlwaysAllowed)
{
   // Depending on the value of requestStatus, provide an appropriate response
   // such as notifying the user which functionality won't work as expected
}

Registrare l'attività in background

Registrare l'attività in background richiamando la funzione di registrazione dell'attività in background. Per altre informazioni sulla registrazione delle attività in background e per visualizzare la definizione del metodo RegisterBackgroundTask() nel codice di esempio seguente, vedere Registrare un'attività in background.

Se si sta valutando l'uso di un trigger di applicazione per estendere la durata del processo in primo piano, è consigliabile usare al suo posto Esecuzione estesa. Il trigger di applicazione è progettato per la creazione di un processo ospitato separatamente in cui lavorare. Il frammento di codice seguente registra un trigger in background out-of-process.

string entryPoint = "Tasks.ExampleBackgroundTaskClass";
string taskName   = "Example application trigger";

BackgroundTaskRegistration task = RegisterBackgroundTask(entryPoint, taskName, appTrigger, internetCondition);
std::wstring entryPoint{ L"Tasks.ExampleBackgroundTaskClass" };
std::wstring taskName{ L"Example application trigger" };

Windows::ApplicationModel::Background::BackgroundTaskRegistration task{
    RegisterBackgroundTask(entryPoint, taskName, appTrigger, internetCondition) };
String ^ entryPoint = "Tasks.ExampleBackgroundTaskClass";
String ^ taskName   = "Example application trigger";

BackgroundTaskRegistration ^ task = RegisterBackgroundTask(entryPoint, taskName, appTrigger, internetCondition);

I parametri di registrazione delle attività in background vengono convalidati al momento della registrazione. Se uno dei parametri di registrazione non è valido, viene restituito un errore. Assicurarsi che l'app gestisca correttamente gli scenari in cui la registrazione delle attività in background ha esito negativo. Se invece l'app dipende dalla presenza di un oggetto di registrazione valido dopo il tentativo di registrazione di un'attività, potrebbe verificarsi un arresto anomalo.

Attivare l'attività in background

Prima di attivare l'attività in background, usare BackgroundTaskRegistration per verificare che l'attività in background sia registrata. Un buon momento per verificare che tutte le attività in background siano registrate durante l'avvio dell'app.

Attivare l'attività in background chiamando ApplicationTrigger.RequestAsync. Qualsiasi istanza di ApplicationTrigger eseguirà questa operazione.

Si noti che ApplicationTrigger.RequestAsync non può essere richiamato dall'attività in background stessa o quando l'app si trova nello stato di esecuzione in background (vedere Ciclo di vita dell'app per altre informazioni sugli stati dell'applicazione). Può restituire DisabledByPolicy se l'utente ha impostato criteri di energia o privacy che impediscono all'app di eseguire attività in background. Inoltre, è possibile eseguire un solo AppTrigger alla volta. Se si tenta di eseguire un'appTrigger mentre un altro è già in esecuzione, la funzione restituirà CurrentlyRunning.

var result = await _AppTrigger.RequestAsync();

Gestire le risorse per l'attività in background

Usare BackgroundExecutionManager.RequestAccessAsync per determinare se l'utente ha deciso che l'attività in background dell'app deve essere limitata. Tenere presente l'utilizzo della batteria ed eseguire in background solo quando è necessario completare un'azione desiderata dall'utente. Per maggiori informazioni sui modi in cui gli utenti possono controllare le impostazioni per l'attività in background, vedere Ottimizzare l'attività in background.

  • Memoria: l'ottimizzazione della memoria e dell'utilizzo energetico dell'app sono fondamentali per garantire che il sistema operativo consentirà l'esecuzione dell'attività in background. Usare le API gestione della memoria per verificare la quantità di memoria usata dall'attività in background. Maggiore è la quantità di memoria usata dall'attività in background, più è difficile che il sistema operativo la mantenga in esecuzione quando un'altra app è in primo piano. L'utente ha in definitiva il controllo di tutte le attività in background che l'app può eseguire e ha visibilità sull'impatto che l'app ha sull'uso della batteria.
  • Tempo CPU: le attività in background sono limitate dalla quantità di tempo di utilizzo dell'orologio reale che ottengono in base al tipo di trigger. Le attività in background attivate dal trigger dell'applicazione sono limitate a circa 10 minuti.

Vedere Supportare l'app con le attività in background per i vincoli delle risorse applicati alle attività in background.

Osservazioni:

A partire da Windows 10, non è più necessario che l'utente aggiunga l'app alla schermata di blocco per usare le attività in background.

Un'attività in background verrà eseguita solo usando un ApplicationTrigger se è stato chiamato RequestAccessAsync per primo.