Compartir a través de


Establecer condiciones para ejecutar una tarea en segundo plano

API importantes

Aprende a establecer condiciones que controlen cuándo se ejecutará tu tarea en segundo plano.

A veces, las tareas en segundo plano requieren que se cumplan ciertas condiciones para que la tarea en segundo plano se realice correctamente. Puede especificar una o varias de las condiciones especificadas por SystemConditionType al registrar la tarea en segundo plano. La condición se comprobará una vez desencadenado el desencadenador. La tarea en segundo plano se pondrá en cola, pero no se ejecutará hasta que se cumplan todas las condiciones necesarias.

La colocación de condiciones en tareas en segundo plano ahorra la duración de la batería y la CPU evitando que las tareas se ejecuten innecesariamente. Por ejemplo, si la tarea en segundo plano se ejecuta en un temporizador y requiere conectividad a Internet, agregue la condición InternetAvailable a TaskBuilder antes de registrar la tarea. Esto ayudará a evitar que la tarea use recursos del sistema y la duración de la batería innecesariamente mediante la ejecución de la tarea en segundo plano cuando el temporizador haya transcurrido y internet esté disponible.

También es posible combinar varias condiciones llamando a AddCondition varias veces en el mismo TaskBuilder. Tenga cuidado de no agregar condiciones conflictivas, como UserPresent y UserNotPresent.

Creación de un objeto SystemCondition

En este tema se supone que ya tiene una tarea en segundo plano asociada a la aplicación y que la aplicación ya incluye código que crea un objeto BackgroundTaskBuilder denominado taskBuilder. Consulte Crear y registrar una tarea en segundo plano en proceso o Crear y registrar una tarea en segundo plano fuera de proceso si necesita crear primero una tarea en segundo plano.

Este tema se aplica a las tareas en segundo plano que se ejecutan fuera de proceso, así como a las que se ejecutan en el mismo proceso que la aplicación en primer plano.

Antes de agregar la condición, cree un objeto SystemCondition para representar la condición que debe estar en vigor para que se ejecute una tarea en segundo plano. En el constructor, especifique la condición que debe cumplirse con un valor de enumeración SystemConditionType.

El código siguiente crea un objeto SystemCondition que especifica la condición InternetAvailable :

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

Agregar el objeto SystemCondition a la tarea en segundo plano

Para agregar la condición, llame al método AddCondition en el objeto BackgroundTaskBuilder y páselo el objeto SystemCondition.

El código siguiente usa taskBuilder para agregar la condición InternetAvailable .

taskBuilder.AddCondition(internetCondition);
taskBuilder.AddCondition(internetCondition);
taskBuilder->AddCondition(internetCondition);

Registrar la tarea en segundo plano

Ahora puede registrar la tarea en segundo plano con el método Register y la tarea en segundo plano no se iniciará hasta que se cumpla la condición especificada.

El código siguiente registra la tarea y almacena el objeto BackgroundTaskRegistration resultante:

BackgroundTaskRegistration task = taskBuilder.Register();
Windows::ApplicationModel::Background::BackgroundTaskRegistration task{ recurringTaskBuilder.Register() };
BackgroundTaskRegistration ^ task = taskBuilder->Register();

Nota:

Los parámetros de registro de tareas en segundo plano se validan en el momento del registro. Se devuelve un error si alguno de los parámetros de registro no es válido. Asegúrese de que la aplicación controla correctamente los escenarios en los que se produce un error en el registro de tareas en segundo plano; en su lugar, la aplicación depende de tener un objeto de registro válido después de intentar registrar una tarea, puede bloquearse.

Colocar varias condiciones en la tarea en segundo plano

Para agregar varias condiciones, la aplicación realiza varias llamadas al método AddCondition. Estas llamadas deben aparecer antes de que el registro de tareas sea efectivo.

Nota:

Tenga cuidado de no agregar condiciones en conflicto a una tarea en segundo plano.

En el fragmento de código siguiente se muestran varias condiciones en el contexto de creación y registro de una tarea en segundo plano.

// 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();

Comentarios

Nota:

Elija las condiciones de la tarea en segundo plano para que solo se ejecute cuando sea necesario y no se ejecute cuando no debería. Consulte SystemConditionType para obtener descripciones de las distintas condiciones de tareas en segundo plano.