Usare un trigger di manutenzione

API importanti

Informazioni su come usare la classe MaintenanceTrigger per eseguire codice leggero in background quando il dispositivo è collegato all’alimentazione da rete elettrica.

Creare un oggetto trigger di manutenzione

Questo esempio presuppone che si abbia codice leggero che si può eseguire in background per migliorare l'app mentre il dispositivo è collegato. Questo argomento è incentrato su MaintenanceTrigger, che è simile a SystemTrigger.

Altre informazioni sulla scrittura di una classe di attività in background sono disponibili in Creare e registrare un'attività in background in-process o Creare e registrare un'attività in background out-of-process.

Creare un nuovo oggetto MaintenanceTrigger. Il secondo parametro, OneShot, specifica se l'attività di manutenzione verrà eseguita una sola volta o continuerà a essere eseguita periodicamente. Se OneShot è impostato su true, il primo parametro (FreshnessTime) specifica il numero di minuti di attesa prima di pianificare l'attività in background. Se OneShot è impostato su false, FreshnessTime specifica la frequenza con cui verrà eseguita l'attività in background.

Nota

Se FreshnessTime è impostato a meno di 15 minuti, viene generata un'eccezione quando si tenta di registrare l'attività in background.

Questo codice di esempio crea un trigger che viene eseguito una volta ogni ora.

uint waitIntervalMinutes = 60;
MaintenanceTrigger taskTrigger = new MaintenanceTrigger(waitIntervalMinutes, false);
uint32_t waitIntervalMinutes{ 60 };
Windows::ApplicationModel::Background::MaintenanceTrigger taskTrigger{ waitIntervalMinutes, false };
unsigned int waitIntervalMinutes = 60;
MaintenanceTrigger ^ taskTrigger = ref new MaintenanceTrigger(waitIntervalMinutes, false);

(Facoltativo) Aggiungere una condizione

In questo esempio, la condizione è impostata su InternetAvailable in modo che la manutenzione venga eseguita quando Internet è disponibile (o quando diventa disponibile). Per un elenco delle possibili condizioni delle attività in background, vedere SystemConditionType.

Il codice seguente aggiunge una condizione al generatore di attività di manutenzione:

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

Registrare l'attività in background

  • Registrare l'attività in background richiamando la funzione di registrazione dell'attività in background. Per maggiori informazioni sulla registrazione delle attività in background, vedere Registrare un'attività in background.

Il codice seguente registra l'attività di manutenzione. Si noti che presuppone che l'attività in background venga eseguita in un processo separato dall'app perché specifica entryPoint. Se l'attività in background viene eseguita nello stesso processo dell'app, non si specifica entryPoint.

string entryPoint = "Tasks.ExampleBackgroundTaskClass";
string taskName   = "Maintenance background task example";

BackgroundTaskRegistration task = RegisterBackgroundTask(entryPoint, taskName, taskTrigger, exampleCondition);
std::wstring entryPoint{ L"Tasks.ExampleBackgroundTaskClass" };
std::wstring taskName{ L"Maintenance background task example" };

Windows::ApplicationModel::Background::BackgroundTaskRegistration task{
    RegisterBackgroundTask(entryPoint, taskName, taskTrigger, exampleCondition) };
String ^ entryPoint = "Tasks.ExampleBackgroundTaskClass";
String ^ taskName   = "Maintenance background task example";

BackgroundTaskRegistration ^ task = RegisterBackgroundTask(entryPoint, taskName, taskTrigger, exampleCondition);

Nota

Per tutte le famiglie di dispositivi ad eccezione del desktop, se la memoria del dispositivo diventa insufficiente, le attività in background potrebbero essere terminate. Se non viene rilevata un'eccezione memoria insufficiente o l'app non la gestisce, l'attività in background verrà terminata senza avviso e senza generare l'evento OnCanceled. Ciò consente di garantire l'esperienza utente dell'app in primo piano. L'attività in background deve essere progettata per gestire questo scenario.

Nota

Le app della piattaforma UWP (Universal Windows Platform) 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 all'app, è 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.

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.