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. Puedes especificar una o más de las condiciones especificadas por SystemConditionType al registrar tu 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 una tarea en segundo plano se ejecuta en un temporizador y requiere conectividad a Internet, agrega la condición InternetAvailable al TaskBuilder antes de registrar la tarea. Esto ayudará a impedir que la tarea use recursos del sistema y consuma batería de forma innecesaria al ejecutarse en segundo plano solo cuando haya transcurrido el temporizador e Internet esté disponible.

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

Crear 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. Consulta Crear y registrar una tarea en segundo plano dentro de proceso o Crear y registrar una tarea en segundo plano fuera de proceso si necesitas 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 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 se debe cumplir 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 una condición, llama al método AddCondition en el objeto BackgroundTaskBuilder y pásalo al objeto SystemCondition.

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

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

Registrar tu 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 siguiente código 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 en que se realiza el registro. Se devuelve un error si cualquiera de los parámetros de registro no es válido. Asegúrate de que la aplicación se ocupe correctamente de los escenarios en los que se produce un error en el registro de tareas en segundo plano. Si, en cambio, la aplicación depende de que haya un objeto de registro válido después de intentar registrar una tarea, es posible que se bloquee.

Colocar varias condiciones en tu tarea en segundo plano

Para agregar varias condiciones, tu aplicación realiza varias llamadas al método AddCondition . Estas llamadas deben recibirse antes de que el registro de la tarea entre en vigor.

Nota:

Tenga cuidado de no agregar condiciones conflictivas 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 lo deba. Consulta SystemConditionType para obtener descripciones de las diferentes condiciones de las tareas en segundo plano.