Dela via


Ange villkor för att köra en bakgrundsaktivitet

viktiga API:er

Lär dig hur du anger villkor som styr när bakgrundsaktiviteten ska köras.

Ibland kräver bakgrundsaktiviteter att vissa villkor uppfylls för att bakgrundsaktiviteten ska lyckas. Du kan ange ett eller flera av de villkor som anges av SystemConditionType när du registrerar bakgrundsaktiviteten. Villkoret kontrolleras när utlösaren har utlösts. Bakgrundsaktiviteten placeras sedan i kö, men den körs inte förrän alla nödvändiga villkor är uppfyllda.

Om du ställer in villkor för bakgrundsaktiviteter sparar du batteritid och PROCESSOR genom att förhindra att uppgifter körs i onödan. Om bakgrundsaktiviteten till exempel körs på en timer och kräver Internetanslutning lägger du till villkoret InternetAvailable till TaskBuilder- innan du registrerar uppgiften. Detta förhindrar att uppgiften använder systemresurser och batteritid i onödan genom att bara köra bakgrundsaktiviteten när timern har förflutit och Internet är tillgängligt.

Du kan också kombinera flera villkor genom att anropa AddCondition flera gånger på samma TaskBuilder. Var noga med att inte lägga till motstridiga villkor, till exempel UserPresent och UserNotPresent.

Skapa ett SystemCondition-objekt

Det här avsnittet förutsätter att du redan har en bakgrundsaktivitet associerad med din app och att appen redan innehåller kod som skapar ett BackgroundTaskBuilder -objekt med namnet taskBuilder. Se Skapa och registrera en pågående bakgrundsaktivitet eller Skapa och registrera en bakgrundsaktivitet som inte är bearbetad om du behöver skapa en bakgrundsaktivitet först.

Det här avsnittet gäller för bakgrundsaktiviteter som körs utanför processen samt de som körs i samma process som förgrundsapplikationen.

Innan du lägger till villkoret skapar du ett SystemCondition- objekt som representerar villkoret som måste gälla för att en bakgrundsaktivitet ska kunna köras. I konstruktorn anger du villkoret som måste uppfyllas med ett SystemConditionType- uppräkningsvärde.

Följande kod skapar ett SystemCondition--objekt som anger villkoret InternetAvailable:

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

Lägg till SystemCondition-objektet i bakgrundsaktiviteten

Om du vill lägga till villkoret anropar du metoden AddCondition på objektet BackgroundTaskBuilder och skickar objektet SystemCondition.

Följande kod använder taskBuilder för att lägga till villkoret InternetAvailable.

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

Registrera bakgrundsaktiviteten

Nu kan du registrera bakgrundsaktiviteten med metoden Registrera och bakgrundsaktiviteten startar inte förrän det angivna villkoret har uppfyllts.

Följande kod registrerar uppgiften och lagrar det resulterande BackgroundTaskRegistration-objektet:

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

Anmärkning

Parametrar för registrering av bakgrundsaktiviteter verifieras vid tidpunkten för registreringen. Ett fel returneras om någon av registreringsparametrarna är ogiltiga. Se till att appen hanterar scenarier där registreringen av bakgrundsaktiviteter misslyckas – om appen i stället är beroende av att ha ett giltigt registreringsobjekt efter att ha försökt registrera en uppgift kan den krascha.

Använd flera villkor på din bakgrundsaktivitet

Om du vill lägga till flera villkor gör appen flera anrop till metoden AddCondition. Dessa anrop måste komma före uppgiftsregistreringen för att vara effektiva.

Anmärkning

Var noga med att inte lägga till motstridiga villkor i en bakgrundsaktivitet.

Följande kodfragment visar flera villkor i samband med att du skapar och registrerar en bakgrundsaktivitet.

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

Anmärkningar

Anmärkning

Välj villkor för bakgrundsaktiviteten så att den bara körs när den behövs och inte körs när den inte ska göra det. Se SystemConditionType för beskrivningar av de olika villkoren för bakgrundsaktiviteter.