Come gestire un'attività in background annullata (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 eseguire un'attività in background che riconosce le richieste di annullamento e interrompe il lavoro, segnalando l'annullamento all'app mediante l'istanza dell'attività in background e l'archivio permanente.

Nota  Per le app di Windows Phone Store, in caso di riduzione eccessiva della memoria disponibile per il dispositivo, le attività in background potrebbero essere terminate senza avviso e senza generare l'evento OnCanceled. Ciò permette di garantire l'esperienza utente dell'app in primo piano. La tua attività in background dovrebbe essere progettata per gestire uno scenario di questo tipo.

Cosa sapere

Tecnologie

Prerequisiti

Istruzioni

Passaggio 1: Usa un gestore eventi per riconoscere le richieste di annullamento

Scrivi un metodo per gestire l'evento di annullamento.

  1. Crea un metodo denominato OnCanceled con il footprint che segue. Questo metodo rappresenta il punto di ingresso chiamato da Windows Runtime ogni volta che viene inviata una richiesta di annullamento per l'attività in background.

    La funzione OnCanceled deve presentare il footprint seguente:

    
    function onCanceled(cancelSender, cancelReason)
    {
        // TODO: Add code to notify the background task that it is cancelled.
    }
    
  2. Aggiungi una variabile denominata cancel all'attività in background. Verrà usata per indicare quando viene ricevuta una richiesta di annullamento.

    Inserisci ad esempio questa riga di codice all'inizio della classe IBackgroundTask, insieme ad altre definizioni di variabile:

    var cancel = false;
    
  3. Nel metodo OnCanceled creato nel passaggio 1 imposta cancel su true.

    Il metodo OnCanceled dell'attività in background di esempio imposta cancel su true:

    function onCanceled(cancelSender, cancelReason) {
        cancel = true;
    }
    
  4. Registra il metodo OnCanceled con il listener dell'evento "canceled" prima di iniziare a lavorare nell'attività in background.

    Usa ad esempio la riga di codice seguente:

    
    backgroundTaskInstance.addEventListener("canceled", onCanceled);
    

Passaggio 2: Gestisci l'annullamento ed esci

Il metodo Run deve monitorare la variabile cancel, quindi può essere chiuso quando la variabile viene impostata su true.

  1. Modifica il codice della classe dell'attività in background per interrompere il lavoro se cancel è impostato su true.

    L'esempio di attività in background include un controllo che arresta il callback del timer periodico se l'attività in background viene annullata:

    
    if (!cancel) {
        // Do work.
    }
    else
    {
        // Cancel.
    }
    
  2. Dopo l'interruzione del lavoro, esegui la pulizia impostando la proprietà succeeded dell'istanza dell'attività in background su false e registra che l'attività è stata annullata. La chiamata si chiude() per uscire dalla funzione.

    L'esempio dell'attività in background registra lo stato in LocalSettings:

    
    if ((_cancelRequested == false) && (_progress < 100))
    {
        // See the background task sample for this code.
    }
    else
    {
        //
        // If the cancellation handler indicated that the task was canceled, stop the background task.
        //
        console.log("Background " + backgroundTaskInstance.task.name + " Canceled");
        backgroundTaskInstance.succeeded = false;
    
        key = backgroundTaskInstance.task.taskId.toString();
        settings.values[key] = "Canceled";
    
        close();
    }
    

Osservazioni

Puoi scaricare l'esempio dell'attività in background per visualizzare questi esempi di codice nel contesto dei metodi.

A scopo illustrativo, il codice di esempio precedente mostra solo parti del metodo Run (oltre al timer di callback) dell'esempio di attività in background.

Esempio di metodo Run

L'attività in background JavaScript completa dell'esempio di attività in background viene illustrata di seguito per fornire il contesto:

//
// A JavaScript background task runs a specified JavaScript file.
//
(function () {
    "use strict";

    //
    // The background task instance's activation parameters are available via Windows.UI.WebUI.WebUIBackgroundTaskInstance.current
    //
    var cancel = false,
        progress = 0,
        backgroundTaskInstance = Windows.UI.WebUI.WebUIBackgroundTaskInstance.current;

    console.log("Background " + backgroundTaskInstance.task.name + " Starting...");

    //
    // Associate a cancellation handler with the background task.
    //
    function onCanceled(cancelSender, cancelReason) {
        cancel = true;
    }
    backgroundTaskInstance.addEventListener("canceled", onCanceled);

    //
    // This function is set to run every 1000 milliseconds ten times and perform background task activity.
    //
    function onTimer() {
        var key = null,
            settings = Windows.Storage.ApplicationData.current.localSettings;

        if (!cancel) {
            if (progress < 100) {
                //
                // Simulate work being done.
                //
                setTimeout(onTimer, 1000);

                //
                // Indicate progress to the foreground application.
                //
                backgroundTaskInstance.progress = progress;
                progress += 10;
            } else {
                //
                // Use the succeeded property to indicate that this background task completed successfully.
                //
                backgroundTaskInstance.succeeded = true;
                backgroundTaskInstance.progress = progress;
                console.log("Background " + backgroundTaskInstance.task.name + " Completed");

                //
                // Write to localSettings to indicate that this background task completed.
                //
                key = backgroundTaskInstance.task.name;
                settings.values[key] = "Completed";

                //
                // A JavaScript background task must call close when it is done.
                //
                close();
            }
        } else {
            //
            // If the cancellation handler indicated that the task was canceled, stop the background task.
            //
            console.log("Background " + backgroundTaskInstance.task.name + " Canceled");
            backgroundTaskInstance.succeeded = false;

            key = backgroundTaskInstance.task.taskId.toString();
            settings.values[key] = "Canceled";

            close();
        }
    }

    //
    // Start the timer function to simulate background task work.
    //
    setTimeout(onTimer, 1000);
})();

Argomenti correlati

Guida introduttiva: Creare e registrare un'attività in background

Come registrare un'attività in background

Come eseguire il debug di un'attività in background

Supporto dell'app con attività in background

Come ottenere l'elenco delle attività in background in sospeso

Come monitorare lo stato e il completamento delle attività in background

Come dichiarare le attività in background nel manifesto dell'applicazione

Linee guida ed elenco di controllo per le attività in background