Responder a eventos do sistema com tarefas em segundo plano

APIs importantes

Saiba como criar uma tarefa em segundo plano que responda a eventos do SystemTrigger.

Este tópico pressupõe que você tenha uma classe de tarefa em segundo plano gravada para seu aplicativo e que essa tarefa precise ser executada em resposta a um evento disparado pelo sistema, como quando a disponibilidade da Internet é alterada ou o usuário faz logon. Este tópico se concentra na classe SystemTrigger . Mais informações sobre como escrever uma classe de tarefa em segundo plano estão disponíveis em Criar e registrar uma tarefa em segundo plano em processo ou Criar e registrar uma tarefa em segundo plano fora do processo.

Criar um objeto SystemTrigger

No código do aplicativo, crie um novo objeto SystemTrigger . O primeiro parâmetro, triggerType, especifica o tipo de gatilho de evento do sistema que ativará essa tarefa em segundo plano. Para obter uma lista de tipos de evento, consulte SystemTriggerType.

O segundo parâmetro, OneShot, especifica se a tarefa em segundo plano será executada apenas uma vez na próxima vez que o evento do sistema ocorrer ou sempre que o evento do sistema ocorrer até que a tarefa seja cancelada.

O código a seguir especifica que a tarefa em segundo plano é executada sempre que a Internet fica disponível:

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 a tarefa em segundo plano

Registre a tarefa em segundo plano chamando sua função de registro de tarefa em segundo plano. Para obter mais informações sobre como registrar tarefas em segundo plano, consulte Registrar uma tarefa em segundo plano.

O código a seguir registra a tarefa em segundo plano para um processo em segundo plano que é executado fora do processo. Se você estivesse chamando uma tarefa em segundo plano que é executada no mesmo processo que o aplicativo host, você não entrypointdefiniria :

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

Observação

Os aplicativos da Plataforma Universal do Windows devem chamar RequestAccessAsync antes de registrar qualquer um dos tipos de gatilho em segundo plano.

Para garantir que seu aplicativo Universal do Windows continue a ser executado corretamente após o lançamento de uma atualização, você deve chamar RemoveAccess e, em seguida, chamar RequestAccessAsync quando seu aplicativo for iniciado após ser atualizado. Para obter mais informações, consulte Diretrizes para tarefas em segundo plano.

Observação

Os parâmetros de registro de tarefa em segundo plano são validados no momento do registro. Um erro será retornado se qualquer um dos parâmetros de registro for inválido. Certifique-se de que seu aplicativo lide normalmente com cenários em que o registro de tarefa em segundo plano falha – se, em vez disso, seu aplicativo depender de ter um objeto de registro válido depois de tentar registrar uma tarefa, ele poderá falhar.  

Comentários

Para ver o registro de tarefa em segundo plano em ação, baixe o exemplo de tarefa em segundo plano.

As tarefas em segundo plano podem ser executadas em resposta aos eventos SystemTrigger e MaintenanceTrigger, mas você ainda precisa declarar tarefas em segundo plano no manifesto do aplicativo. Você também deve chamar RequestAccessAsync antes de registrar qualquer tipo de tarefa em segundo plano.

Os aplicativos podem registrar tarefas em segundo plano que respondem aos eventos TimeTrigger, PushNotificationTrigger e NetworkOperatorNotificationTrigger, permitindo que eles forneçam comunicação em tempo real com o usuário, mesmo quando o aplicativo não está em primeiro plano. Para obter mais informações, consulte Dar suporte ao seu aplicativo com tarefas em segundo plano.