Compartir a través de


Crear y registrar una tarea en segundo plano dentro del proceso

API importantes

En este tema se muestra cómo crear y registrar una tarea en segundo plano que se ejecuta en el mismo proceso que la aplicación.

Las tareas en segundo plano en proceso son más sencillas de implementar que las tareas en segundo plano fuera de proceso. Sin embargo, son menos resistentes. Si el código que se ejecuta en una tarea en segundo plano en proceso se bloquea, se quitará la aplicación. Tenga en cuenta también que DeviceUseTrigger, DeviceServicingTrigger e IoTStartupTask no se pueden usar con el modelo en proceso. Tampoco es posible activar una tarea en segundo plano de VoIP dentro de la aplicación. Estos desencadenadores y tareas siguen siendo compatibles con el modelo de tareas en segundo plano fuera del proceso.

Tenga en cuenta que la actividad en segundo plano se puede finalizar incluso cuando se ejecute dentro del proceso en primer plano de la aplicación si se ejecuta más allá de los límites de tiempo de ejecución. Para algunos propósitos, la resistencia de separar el trabajo en una tarea en segundo plano que se ejecuta en un proceso independiente sigue siendo útil. Mantener el trabajo en segundo plano como una tarea independiente de la aplicación en primer plano puede ser la mejor opción para el trabajo que no requiere comunicación con la aplicación en primer plano.

Aspectos básicos

El modelo en proceso mejora el ciclo de vida de la aplicación con notificaciones mejoradas para cuando la aplicación está en primer plano o en segundo plano. Hay dos nuevos eventos disponibles en el objeto Application para estas transiciones: EnteredBackground y LeavingBackground. Estos eventos encajan en el ciclo de vida de la aplicación en función del estado de visibilidad de la aplicación. Obtenga más información sobre estos eventos y cómo afectan al ciclo de vida de la aplicación en el ciclo de vida de la aplicación.

En un nivel alto, controlará el evento EnteredBackground para ejecutar el código que se ejecutará mientras la aplicación se ejecuta en segundo plano y controlará LeavingBackground para saber cuándo la aplicación se ha movido al primer plano.

Registrar el desencadenador de tareas en segundo plano

La actividad en segundo plano en proceso se registra mucho igual que la actividad en segundo plano fuera del proceso. Todos los desencadenadores en segundo plano comienzan con el registro mediante BackgroundTaskBuilder. El generador facilita el registro de una tarea en segundo plano estableciendo todos los valores necesarios en un solo lugar:

var builder = new BackgroundTaskBuilder();
builder.Name = "My Background Trigger";
builder.SetTrigger(new TimeTrigger(15, true));
// Do not set builder.TaskEntryPoint for in-process background tasks
// Here we register the task and work will start based on the time trigger.
BackgroundTaskRegistration task = builder.Register();

Nota:

Las aplicaciones universales de Windows deben llamar a RequestAccessAsync antes de registrar cualquiera de los tipos de desencadenador en segundo plano. Para asegurarse de que la aplicación universal de Windows sigue ejecutándose correctamente después de publicar una actualización, debes llamar a RemoveAccess y, a continuación, llamar a RequestAccessAsync cuando la aplicación se inicie después de actualizarse. Para obtener más información, vea Directrices para tareas en segundo plano.

En el caso de las actividades en segundo plano en proceso no se establece TaskEntryPoint. Dejarla en blanco, se habilita el punto de entrada predeterminado, un nuevo método protegido en el objeto Application denominado OnBackgroundActivated()..

Una vez registrado un desencadenador, se activará en función del tipo de desencadenador establecido en el método SetTrigger . En el ejemplo anterior se usa timeTrigger, que se activará quince minutos a partir del momento en que se registró.

Agregar una condición para controlar cuándo se ejecutará la tarea (opcional)

Puede agregar una condición para controlar cuándo se ejecutará la tarea después de que se produzca el evento de desencadenador. Por ejemplo, si no desea que la tarea se ejecute hasta que el usuario esté presente, use la condición UserPresent. Para obtener una lista de las posibles condiciones, consulte SystemConditionType.

El código de ejemplo siguiente asigna una condición que requiere que el usuario esté presente:

builder.AddCondition(new SystemCondition(SystemConditionType.UserPresent));

Coloque el código de actividad en segundo plano en OnBackgroundActivated()

Coloque el código de actividad en segundo plano en OnBackgroundActivated para responder al desencadenador en segundo plano cuando se activa. OnBackgroundActivated se puede tratar como IBackgroundTask.Run. El método tiene un parámetro BackgroundActivatedEventArgs , que contiene todo lo que el método Run entrega. Por ejemplo, en App.xaml.cs:

using Windows.ApplicationModel.Background;

...

sealed partial class App : Application
{
  ...

  protected override void OnBackgroundActivated(BackgroundActivatedEventArgs args)
  {
      base.OnBackgroundActivated(args);
      IBackgroundTaskInstance taskInstance = args.TaskInstance;
      DoYourBackgroundWork(taskInstance);  
  }
}

Para obtener un ejemplo más completo de OnBackgroundActivated , consulte Conversión de un servicio de aplicaciones para que se ejecute en el mismo proceso que su aplicación host.

Controlar el progreso y la finalización de tareas en segundo plano

El progreso y la finalización de la tarea se pueden supervisar de la misma manera que para las tareas en segundo plano de varios procesos (consulte Supervisar el progreso y la finalización de la tarea en segundo plano), pero es probable que encuentre que puede realizar un seguimiento más fácilmente mediante variables para realizar un seguimiento del progreso o el estado de finalización en la aplicación. Esta es una de las ventajas de tener el código de actividad en segundo plano que se ejecuta en el mismo proceso que la aplicación.

Controlar la cancelación de tareas en segundo plano

Las tareas en segundo plano en proceso se cancelan de la misma manera que las tareas en segundo plano fuera de proceso (consulte Controlar una tarea en segundo plano cancelada). Tenga en cuenta que el controlador de eventos BackgroundActivated debe salir antes de que se produzca la cancelación, o todo el proceso se finalizará. Si la aplicación en primer plano se cierra inesperadamente al cancelar la tarea en segundo plano, compruebe que el controlador salió antes de que se produjera la cancelación.

Manifiesto

A diferencia de las tareas en segundo plano fuera del proceso, no es necesario agregar información de tareas en segundo plano al manifiesto del paquete para ejecutar tareas en segundo plano en proceso.

Resumen y pasos siguientes

Ahora debería comprender los conceptos básicos de cómo escribir una tarea en segundo plano en proceso.

Consulte los siguientes temas relacionados para la referencia de API, instrucciones conceptuales de tareas en segundo plano y instrucciones más detalladas para escribir aplicaciones que usan tareas en segundo plano.

Temas informativos detallados sobre tareas en segundo plano

Guía de tareas en segundo plano

Referencia de API de tareas en segundo plano