Condividi tramite


Come registrare un'attività in background (HTML)

[ Questo articolo è rivolto agli sviluppatori per Windows 8.x e Windows Phone 8.x che realizzano app di Windows Runtime. Gli sviluppatori che usano Windows 10 possono vedere Documentazione aggiornata ]

Impara a creare una funzione da poter riutilizzare per registrare correttamente la maggior parte delle attività in background. Questo argomento descrive una funzione di utilità che consente di registrare le attività in background. Questa funzione di utilità verifica la presenza di eventuali registrazioni esistenti prima di registrare l'attività per evitare problemi con più registrazioni, quindi applica una condizione di sistema all'attività in background. L'esercitazione include un esempio completo e funzionante di questa funzione di utilità.

Nota  

Per le app di Windows Phone Store, devi chiamare RequestAccessAsync prima di tentare di registrare attività in background. In Windows la chiamata è necessaria solo per il set di attività in background per la cui esecuzione l'app deve essere nella schermata di blocco. Nel telefono devi tuttavia chiamare il metodo una volta prima di registrare attività in background.

Per garantire che l'app di Windows Phone continui a funzionare correttamente dopo il rilascio di un aggiornamento, devi chiamare RemoveAccess e poi chiamare RequestAccessAsync all'avvio dell'app dopo l'aggiornamento. Per altre informazioni, vedi Linee guida per le attività in background (HTML).

Cosa sapere

Tecnologie

Prerequisiti

  • Questo argomento presuppone la presenza di un'attività in background che deve essere registrata (questo argomento non spiega come scrivere un'attività in background).

Istruzioni

Passaggio 1: Definisci la firma del funzione

Questo metodo accetta il punto di ingresso dell'attività, il nome dell'attività, un trigger dell'attività in background precostruito e, facoltativamente un elemento SystemCondition per l'attività in background. Si noti che questa funzione restituirà un oggetto BackgroundTaskRegistration.

function RegisterBackgroundTask(taskEntryPoint, 
                                taskName,
                                trigger,
                                condition)
{
    
    // We’ll add code to this function in subsequent steps.

}

Passaggio 2: Verifica la presenza di eventuali registrazioni esistenti

Verifica se l'attività è già registrata. È importante eseguire questa verifica perché se un'attività viene registrata più volte, verrà eseguita più di una volta alla sua attivazione con conseguente uso eccessivo della quota CPU e comportamento imprevisto.

Puoi verificare la presenza di eventuali registrazioni esistenti eseguendo una query sulla proprietà BackgroundTaskRegistration.AllTasks e iterando il risultato. Verifica il nome di ogni istanza, se corrisponde al nome dell'attività che desideri registrare, interrompi il ciclo e imposta una variabile flag in modo che il codice possa scegliere un percorso diverso nel passaggio successivo.

Nota  Per l'attività in background usa nomi univoci per l'app. Assicurati che ogni attività in background presenti un nome univoco.

 

Il codice seguente registra un'attività in background usando l'elemento SystemTrigger creato nell'ultimo passaggio:

function RegisterBackgroundTask(taskEntryPoint, 
                                taskName,
                                trigger,
                                condition)
{
    //
    // Check for existing registrations of this background task.
    //

    var taskRegistered = false;

    var background = Windows.ApplicationModel.Background;
    var iter = background.BackgroundTaskRegistration.allTasks.first();
    var hascur = iter.hasCurrent;

    while (hascur) {
        var cur = iter.current.value;

        if (cur.name === taskName) {
            taskRegistered = true;
            break;
        }
        
        hascur = iter.moveNext();
    }


    // We’ll register the task in the next step.

}

Passaggio 3: Registra l'attività in background (o restituisci la registrazione esistente)

Verifica se l'attività era presente nell'elenco delle registrazioni di attività in background esistenti. In questo caso, restituisci quell'istanza dell'attività.

Registra l'attività usando un nuovo oggetto BackgroundTaskBuilder. Questo codice verifica se il parametro della condizione è null, se non lo è, aggiunge la condizione all'oggetto di registrazione. Restituisci l'elemento BackgroundTaskRegistration restituito dal metodo BackgroundTaskBuilder.Register.

Nota  

A partire da Windows 8.1, i parametri di registrazione dell'attività in background vengono convalidati al momento della registrazione. Se uno dei parametri di registrazione non è valido, viene restituito un errore. L'app deve essere in grado di gestire scenari in cui si verifica un errore di registrazione dell'attività in background. Puoi ad esempio usare un'istruzione condizionale per controllare la presenza di errori di registrazione e quindi eseguire un nuovo tentativo in caso di errore della registrazione usando valori dei parametri diversi.

 

L'esempio seguente restituisce l'attività esistente o aggiunge il codice che registra l'attività in background (inclusa la condizione di sistema facoltativa, se presente):

function RegisterBackgroundTask(taskEntryPoint, 
                                taskName,
                                trigger,
                                condition)
{
    //
    // Check for existing registrations of this background task.
    //

    var taskRegistered = false;

    var background = Windows.ApplicationModel.Background;
    var iter = background.BackgroundTaskRegistration.allTasks.first();
    var hascur = iter.hasCurrent;

    while (hascur) {
        var cur = iter.current.value;

        if (cur.name === taskName) {
            taskRegistered = true;
            break;
        }
        
        hascur = iter.moveNext();
    }


    //
    // If the task is already registered, return the registration object.
    //

    if (taskRegistered == true) {
        
        return iter.current;
    }


    //
    // Register the background task.
    //
    var builder = new background.BackgroundTaskBuilder();

    builder.Name = taskName;
    builder.TaskEntryPoint = taskEntryPoint;
    builder.setTrigger(trigger);

    if (condition != null) {

        builder.addCondition(condition);
    }

    var task = builder.register();

    return task;
}

Completa la funzione di utilità di registrazione dell'attività in background

Questo esempio mostra la funzione di registrazione dell'attività in background. Questa funzione può essere usata per registrare la maggior parte delle attività in background, ad eccezione delle attività in background di rete.

//
// Register a background task with the specified taskEntryPoint, name, trigger,
// and condition (optional).
//
// taskEntryPoint: Task entry point for the background task.
// taskName: A name for the background task.
// trigger: The trigger for the background task.
// condition: Optional parameter. A conditional event that must be true for the task to fire.
//
function RegisterBackgroundTask(taskEntryPoint, 
                                taskName,
                                trigger,
                                condition)
{
    //
    // Check for existing registrations of this background task.
    //

    var taskRegistered = false;

    var background = Windows.ApplicationModel.Background;
    var iter = background.BackgroundTaskRegistration.allTasks.first();
    var hascur = iter.hasCurrent;

    while (hascur) {
        var cur = iter.current.value;

        if (cur.name === taskName) {
            taskRegistered = true;
            break;
        }
        
        hascur = iter.moveNext();
    }


    //
    // If the task is already registered, return the registration object.
    //

    if (taskRegistered == true) {
        
        return iter.current;
    }


    //
    // Register the background task.
    //
    var builder = new background.BackgroundTaskBuilder();

    builder.Name = taskName;
    builder.TaskEntryPoint = taskEntryPoint;
    builder.setTrigger(trigger);

    if (condition != null) {

        builder.addCondition(condition);
    }

    var task = builder.register();

    return task;
}

Argomenti correlati

Guida introduttiva: Creazione e registrazione di un'attività di background

Come rispondere agli eventi di sistema con le attività in background

Come impostare le condizioni per un'attività in background

Come usare i trigger di manutenzione

Come gestire un'attività in background annullata

Come monitorare l'avanzamento e il completamento delle attività in background

Come eseguire un'attività in background mediante timer

Come eseguire il debug di un'attività in background

Come attivare eventi di sospensione e ripresa ed eventi in background nelle app di Windows Store (durante il debug)