Impostare le condizioni per l'esecuzione di un'attività in background
API importanti
Informazioni su come impostare le condizioni che controllano l'esecuzione dell'attività in background.
In alcuni casi, le attività in background richiedono che vengano soddisfatte determinate condizioni affinché l'attività in background abbia esito positivo. È possibile specificare una o più condizioni specificate da SystemConditionType durante la registrazione dell'attività in background. La condizione verrà controllata dopo l'attivazione del trigger. L'attività in background verrà quindi accodata, ma non verrà eseguita fino a quando non saranno soddisfatte tutte le condizioni necessarie.
L'inserimento delle condizioni nelle attività in background consente di risparmiare durata della batteria e CPU impedendo l'esecuzione inutile delle attività. Ad esempio, se l'attività in background viene eseguita in un timer e richiede la connettività Internet, aggiungere la condizione InternetAvailable a TaskBuilder prima di registrare l'attività. Ciò consentirà di evitare che l'attività usi risorse di sistema e durata della batteria inutilmente eseguendo l'attività in background solo quando il timer è trascorso e Internet è disponibile.
È anche possibile combinare più condizioni chiamando AddCondition più volte nello stesso TaskBuilder. Prestare attenzione a non aggiungere condizioni in conflitto, ad esempio UserPresent e UserNotPresent.
Creare un oggetto SystemCondition
Questo argomento presuppone che all'app sia già associata un'attività in background e che l'app includa già il codice che crea un oggetto BackgroundTaskBuilder denominato taskBuilder. Vedere Creare e registrare un'attività in background in-process o Creare e registrare un'attività in background out-of-process se è prima necessario creare un'attività in background.
Questo argomento si applica alle attività in background che sono eseguite out-of-process e a quelle eseguite nello stesso processo dell'app in primo piano.
Prima di aggiungere la condizione, creare un oggetto SystemCondition per rappresentare la condizione che deve essere attiva per l'esecuzione di un'attività in background. Nel costruttore specificare la condizione che deve essere soddisfatta con un valore di enumerazione SystemConditionType.
Il codice seguente crea un oggetto SystemCondition che specifica la condizione InternetAvailable:
SystemCondition internetCondition = new SystemCondition(SystemConditionType.InternetAvailable);
Windows::ApplicationModel::Background::SystemCondition internetCondition{
Windows::ApplicationModel::Background::SystemConditionType::InternetAvailable };
SystemCondition ^ internetCondition = ref new SystemCondition(SystemConditionType::InternetAvailable);
Aggiungere l'oggetto SystemCondition all'attività in background
Per aggiungere la condizione, chiamare il metodo AddCondition sull'oggetto BackgroundTaskBuilder e passarlo all'oggetto SystemCondition.
Il codice seguente usa taskBuilder per aggiungere la condizione InternetAvailable.
taskBuilder.AddCondition(internetCondition);
taskBuilder.AddCondition(internetCondition);
taskBuilder->AddCondition(internetCondition);
Registrare l'attività in background
È ora possibile registrare l'attività in background con il metodo Register e l'attività in background non verrà avviata fino a quando non viene soddisfatta la condizione specificata.
Il codice seguente registra l'attività e archivia l'oggetto BackgroundTaskRegistration risultante:
BackgroundTaskRegistration task = taskBuilder.Register();
Windows::ApplicationModel::Background::BackgroundTaskRegistration task{ recurringTaskBuilder.Register() };
BackgroundTaskRegistration ^ task = taskBuilder->Register();
Nota
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.
Inserire più condizioni nell'attività in background
Per aggiungere più condizioni, l'app effettua più chiamate al metodo AddCondition. Queste chiamate devono provenire prima che la registrazione delle attività sia effettiva.
Nota
Prestare attenzione a non aggiungere condizioni in conflitto a un'attività in background.
Il frammento di codice seguente mostra più condizioni nel contesto della creazione e della registrazione di un'attività in background.
// Set up the background task.
TimeTrigger hourlyTrigger = new TimeTrigger(60, false);
var recurringTaskBuilder = new BackgroundTaskBuilder();
recurringTaskBuilder.Name = "Hourly background task";
recurringTaskBuilder.TaskEntryPoint = "Tasks.ExampleBackgroundTaskClass";
recurringTaskBuilder.SetTrigger(hourlyTrigger);
// Begin adding conditions.
SystemCondition userCondition = new SystemCondition(SystemConditionType.UserPresent);
SystemCondition internetCondition = new SystemCondition(SystemConditionType.InternetAvailable);
recurringTaskBuilder.AddCondition(userCondition);
recurringTaskBuilder.AddCondition(internetCondition);
// Done adding conditions, now register the background task.
BackgroundTaskRegistration task = recurringTaskBuilder.Register();
// Set up the background task.
Windows::ApplicationModel::Background::TimeTrigger hourlyTrigger{ 60, false };
Windows::ApplicationModel::Background::BackgroundTaskBuilder recurringTaskBuilder;
recurringTaskBuilder.Name(L"Hourly background task");
recurringTaskBuilder.TaskEntryPoint(L"Tasks.ExampleBackgroundTaskClass");
recurringTaskBuilder.SetTrigger(hourlyTrigger);
// Begin adding conditions.
Windows::ApplicationModel::Background::SystemCondition userCondition{
Windows::ApplicationModel::Background::SystemConditionType::UserPresent };
Windows::ApplicationModel::Background::SystemCondition internetCondition{
Windows::ApplicationModel::Background::SystemConditionType::InternetAvailable };
recurringTaskBuilder.AddCondition(userCondition);
recurringTaskBuilder.AddCondition(internetCondition);
// Done adding conditions, now register the background task.
Windows::ApplicationModel::Background::BackgroundTaskRegistration task{ recurringTaskBuilder.Register() };
// Set up the background task.
TimeTrigger ^ hourlyTrigger = ref new TimeTrigger(60, false);
auto recurringTaskBuilder = ref new BackgroundTaskBuilder();
recurringTaskBuilder->Name = "Hourly background task";
recurringTaskBuilder->TaskEntryPoint = "Tasks.ExampleBackgroundTaskClass";
recurringTaskBuilder->SetTrigger(hourlyTrigger);
// Begin adding conditions.
SystemCondition ^ userCondition = ref new SystemCondition(SystemConditionType::UserPresent);
SystemCondition ^ internetCondition = ref new SystemCondition(SystemConditionType::InternetAvailable);
recurringTaskBuilder->AddCondition(userCondition);
recurringTaskBuilder->AddCondition(internetCondition);
// Done adding conditions, now register the background task.
BackgroundTaskRegistration ^ task = recurringTaskBuilder->Register();
Osservazioni:
Nota
Selezionare le condizioni per l'attività in background in modo che venga eseguita solo quando è necessaria e non venga eseguita quando non deve essere eseguita. Vedere SystemConditionType per le descrizioni delle diverse condizioni dell'attività in background.
Argomenti correlati
- Creare e registrare un'attività in background out-of-process
- Creare e registrare un'attività in background in-process
- Dichiarare le attività in background nel manifesto dell'applicazione
- Gestire un'attività in background annullata
- Monitorare lo stato di avanzamento e il completamento delle attività in background
- Registrare un'attività in background
- Rispondere agli eventi di sistema con le attività in background
- Aggiornare un riquadro animato da un'attività in background
- Usare un trigger di manutenzione
- Eseguire un'attività in background mediante timer
- Linee guida per le attività in background
- Eseguire il debug di un'attività in background
- Come attivare eventi di sospensione, ripresa e background nelle app UWP (durante il debug)