Responder a eventos del sistema con tareas en segundo planoRespond to system events with background tasks

API importantesImportant APIs

Aprende a crear una tarea en segundo plano que responda a eventos SystemTrigger.Learn how to create a background task that responds to SystemTrigger events.

En este tema se supone que tienes una clase de tareas en segundo plano escrita para tu aplicación y que esta tarea necesita ejecutarse en respuesta a un evento desencadenado por el sistema, como cuando la disponibilidad de Internet cambia o el usuario inicia sesión.This topic assumes that you have a background task class written for your app, and that this task needs to run in response to an event triggered by the system such as when internet availability changes or the user logging in. Este tema se centra en la clase SystemTrigger.This topic focuses on the SystemTrigger class. Para obtener más información sobre cómo escribir una clase de tarea en segundo plano, consulta Crear y registrar una tarea en segundo plano dentro de proceso o Crear y registrar una tarea en segundo plano fuera de proceso.More information on writing a background task class is available in Create and register an in-process background task or Create and register an out-of-process background task.

Crear un objeto SystemTriggerCreate a SystemTrigger object

En el código de tu aplicación, crea un nuevo objeto SystemTrigger.In your app code, create a new SystemTrigger object. El primer parámetro, triggerType, especifica el tipo de desencadenador de eventos del sistema que activará esta tarea en segundo plano.The first parameter, triggerType, specifies the type of system event trigger that will activate this background task. Para ver una lista de los tipos de eventos, consulta SystemTriggerType.For a list of event types, see SystemTriggerType.

El segundo parámetro, OneShot, especifica si la tarea en segundo plano se ejecutará solo una vez la próxima ocasión que ocurra el evento del sistema o cada vez que ocurra el evento del sistema hasta que se elimine el registro de la tarea.The second parameter, OneShot, specifies whether the background task will run only once the next time the system event occurs or every time the system event occurs until the task is unregistered.

El siguiente código especifica que la tarea en segundo plano se ejecuta siempre que Internet vuelva a estar disponible:The following code specifies that the background task runs whenever the Internet becomes available:

SystemTrigger internetTrigger = new SystemTrigger(SystemTriggerType.InternetAvailable, false);
Windows::ApplicationModel::Background::SystemTrigger internetTrigger{
    Windows::ApplicationModel::Background::SystemTriggerType::InternetAvailable, false};
SystemTrigger ^ internetTrigger = ref new SystemTrigger(SystemTriggerType::InternetAvailable, false);

Registrar la tarea en segundo planoRegister the background task

Registra la tarea en segundo plano llamando a tu función de registro de tareas en segundo plano.Register the background task by calling your background task registration function. Para obtener más información sobre el registro de tareas en segundo plano, consulta Registrar una tarea en segundo plano.For more information on registering background tasks, see Register a background task.

El siguiente código registra la tarea en segundo plano para un proceso en segundo plano que se ejecuta fuera de proceso.The following code registers the background task for a background process that runs out-of-process. Si estuvieras llamando a una tarea en segundo plano que se ejecuta en el mismo proceso que la aplicación host, no establecerías entrypoint:If you were calling a background task that runs in the same process as the host app, you would not set entrypoint:

string entryPoint = "Tasks.ExampleBackgroundTaskClass"; // Namespace name, '.', and the name of the class containing the background task
string taskName   = "Internet-based background task";

BackgroundTaskRegistration task = RegisterBackgroundTask(entryPoint, taskName, internetTrigger, exampleCondition);
std::wstring entryPoint{ L"Tasks.ExampleBackgroundTaskClass" }; // don't set for in-process background tasks.
std::wstring taskName{ L"Internet-based background task" };

Windows::ApplicationModel::Background::BackgroundTaskRegistration task{
    RegisterBackgroundTask(entryPoint, taskName, internetTrigger, exampleCondition) };
String ^ entryPoint = "Tasks.ExampleBackgroundTaskClass"; // don't set for in-process background tasks
String ^ taskName   = "Internet-based background task";

BackgroundTaskRegistration ^ task = RegisterBackgroundTask(entryPoint, taskName, internetTrigger, exampleCondition);

Nota

Plataforma universal de Windows aplicaciones deben llamar a RequestAccessAsync antes de registrar cualquiera de los tipos de desencadenadores en segundo plano.Universal Windows Platform apps must call RequestAccessAsync before registering any of the background trigger types.

Para garantizar que la aplicación universal de Windows 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.To ensure that your Universal Windows app continues to run properly after you release an update, you must call RemoveAccess and then call RequestAccessAsync when your app launches after being updated. Para obtener más información, vea instrucciones para tareas en segundo plano.For more information, see Guidelines for background tasks.

Nota

Los parámetros de registro de tareas en segundo plano se validan en el momento en que se realiza el registro.Background task registration parameters are validated at the time of registration. Se devuelve un error si cualquiera de los parámetros de registro no es válido.An error is returned if any of the registration parameters are invalid. 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.Ensure that your app gracefully handles scenarios where background task registration fails - if instead your app depends on having a valid registration object after attempting to register a task, it may crash.  

ObservacionesRemarks

Para ver el registro de una tarea en segundo plano en acción, descarga la muestra de tarea en segundo plano.To see background task registration in action, download the background task sample.

Las tareas en segundo plano pueden ejecutarse en respuesta a los eventos SystemTrigger y MaintenanceTrigger, pero aún debes declarar tareas en segundo plano en el manifiesto de la aplicación.Background tasks can run in response to SystemTrigger and MaintenanceTrigger events, but you still need to Declare background tasks in the application manifest. También debes llamar a RequestAccessAsync antes de registrar cualquier tipo de tarea en segundo plano.You must also call RequestAccessAsync before registering any background task type.

Las aplicaciones pueden registrar tareas en segundo plano que respondan a los eventos TimeTrigger, PushNotificationTrigger y NetworkOperatorNotificationTrigger, lo que les permite proporcionar una comunicación en tiempo real con el usuario aunque la aplicación no esté en el primer plano.Apps can register background tasks that respond to TimeTrigger, PushNotificationTrigger, and NetworkOperatorNotificationTrigger events, enabling them to provide real-time communication with the user even when the app is not in the foreground. Para obtener más información, consulte compatibilidad con la aplicación con tareas en segundo plano.For more information, see Support your app with background tasks.