Share via


Cómo registrar una tarea en segundo plano (HTML)

[ Este artículo está destinado a desarrolladores de Windows 8.x y Windows Phone 8.x que escriben aplicaciones de Windows en tiempo de ejecución. Si estás desarrollando para Windows 10, consulta la documentación más reciente

Aprende cómo crear una función que pueda reutilizarse para registrar de forma segura la mayoría de las tareas en segundo plano. En este tema se recorre una función de utilidad que registra tareas en segundo plano. Antes de registrar una tarea varias veces, esta función de utilidad primero comprueba registros existentes para evitar los problemas que pueden surgir por registros repetidos. Además puede aplicar una condición del sistema a la tarea en segundo en plano. El tutorial incluye un ejemplo completo de funcionamiento de esta función de utilidad.

Nota  

En las aplicaciones de la Tienda de Windows Phone, debes llamar a RequestAccessAsync antes de intentar registrar cualquier tarea en segundo plano. En Windows, esta llamada solo es necesaria para el conjunto de tareas en segundo plano que requieren que tu aplicación esté en la pantalla de bloqueo para ejecutarse, pero en el teléfono debes llamar a este método una vez antes de registrar cualquier tarea en segundo plano.

Para garantizar que la aplicación de Windows Phone continúe funcionando correctamente después de publicar una actualización, se debe llamar a RemoveAccess y luego a RequestAccessAsync cuando se inicia la aplicación tras su actualización. Para obtener más información, consulta Directrices para tareas en segundo plano (HTML).

Lo que debes saber

Tecnologías

Requisitos previos

  • En este tema se supone que ya tienes una tarea en segundo plano que necesitas registrar (no se incluye cómo escribir una tarea en segundo plano).

Instrucciones

Paso 1: Definir la firma de función

Esta función toma el punto de entrada de la tarea, nombre de la tarea y un desencadenador de tarea en segundo plano preconstruido y, de forma opcional, un SystemCondition para la tarea en segundo plano. Ten en cuenta que esta función devolverá un objeto BackgroundTaskRegistration.

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

}

Paso 2: Comprobar registros existentes

Comprueba si la tarea ya está registrada. Es importante que compruebes esto porque si una tarea está registrada varias veces, se ejecutará más de una vez cada vez que sea desencadenada; esto consume una excesiva cuota de CPU y puede ocasionar un comportamiento inesperado.

Puedes comprobar registros existentes al consultar la propiedad BackgroundTaskRegistration.AllTasks y al iterar en el resultado. Comprueba el nombre de cada instancia. Si coincide con el nombre de la tarea que estás registrando, entonces interrumpe el bucle y coloca una variable de marca para que tu código pueda elegir otra ruta en el siguiente paso.

Nota  Usa nombres de tareas en segundo plano que sean exclusivos de tu aplicación. Asegúrate de que cada tarea en segundo plano tenga un nombre exclusivo.

 

El siguiente código registra una tarea en segundo plano usando SystemTrigger, que creamos en el último paso:

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.

}

Paso 3: Registrar la tarea en segundo plano (o devolver el registro existente)

Comprueba si se encontró la tarea en la lista de registros de tareas en segundo plano existentes. Si ya está en la lista, devuelve esa instancia de la tarea.

Después registra la tarea con un nuevo objeto BackgroundTaskBuilder. Este código debe comprobar si el parámetro de la condición es nulo y, si no lo es, agregar la condición al objeto de registro. Devuelve BackgroundTaskRegistration que la función BackgroundTaskBuilder.Register devolvió.

Nota  

A partir de Windows 8.1, los parámetros de registro de tareas en segundo plano se validan en el momento de realizar el registro. Se devuelve un error si cualquiera de los parámetros de registro no es válido. La aplicación debe poder enfrentarse a los escenarios en que se produce un error en el registro de tareas en segundo plano. Por ejemplo, usa una instrucción condicional para comprobar si hay errores de registro y después vuelve a probar el registro con errores con valores de parámetros diferentes.

 

El siguiente ejemplo, o bien devuelve la tarea existente, o bien agrega código que registra la tarea en segundo plano (incluida la condición del sistema opcional si la hubiera):

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;
}

Completar la función de utilidad de registro de tareas en segundo plano

Ese ejemplo muestra la función de registro de tareas en segundo plano completa. Esta función puede usarse para registrar la mayoría de las tareas en segundo plano, a excepción de tareas en red.

//
// 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;
}

Temas relacionados

Inicio rápido: creación y registro de una tarea en segundo plano

Cómo responder a eventos del sistema con tareas en segundo plano

Cómo establecer condiciones para ejecutar una tarea en segundo plano

Cómo usar desencadenadores de mantenimiento

Cómo administrar una tarea en segundo plano cancelada

Cómo supervisar el progreso y la finalización de tareas en segundo plano

Cómo ejecutar una tarea en segundo plano en un temporizador

Cómo depurar una tarea en segundo plano

Cómo desencadenar los eventos suspender, reanudar y en segundo plano en aplicaciones de la Tienda Windows (al depurar)