Dela via


Skapa och registrera en pågående bakgrundsaktivitet

viktiga API:er

Det här avsnittet visar hur du skapar och registrerar en bakgrundsaktivitet som körs i samma process som din app.

Bakgrundsaktiviteter som körs i processen är enklare att implementera än bakgrundsaktiviteter utanför processen. De är dock mindre motståndskraftiga. Om koden som körs i en pågående bakgrundsaktivitet kraschar kommer den att ta bort din app. Observera också att DeviceUseTrigger, DeviceServicingTrigger och IoTStartupTask inte kan användas med in-process-modellen. Det går inte heller att aktivera en VoIP-bakgrundsaktivitet i ditt program. Dessa utlösare och aktiviteter stöds fortfarande med hjälp av modellen för bakgrundsaktiviteter som körs utanför processen.

Tänk på att bakgrundsaktivitet kan avslutas även när den körs i appens förgrundsprocess om den överskrider tidsbegränsningar för körning. I vissa syften är motståndskraften att separera arbete till en bakgrundsaktivitet som körs i en separat process fortfarande användbar. Att hålla bakgrundsarbete separat från förgrundsprogrammet kan vara det bästa alternativet för arbete som inte kräver kommunikation med förgrundsprogrammet.

Grundläggande principer

Den processbaserade modellen förbättrar programmets livscykel med förbättrade meddelanden för när din app är i förgrunden eller i bakgrunden. Två nya händelser är tillgängliga från programobjektet för dessa övergångar: EnteredBackground och LeavingBackground. Dessa händelser passar in i programmets livscykel baserat på programmets synlighetstillstånd Läs mer om dessa händelser och hur de påverkar programmets livscykel applivscykeln.

På hög nivå hanterar du händelsen EnteredBackground för att köra koden som körs medan appen körs i bakgrunden och hanterar LeavingBackground- för att veta när appen har flyttats till förgrunden.

Registrera din bakgrundsaktivitetsutlösare

Bakgrundsaktivitet i processen registreras ungefär på samma sätt som bakgrundsaktivitet utanför processen. Alla bakgrundsutlösare börjar med registrering med hjälp av BackgroundTaskBuilder. Byggaren gör det enkelt att registrera en bakgrundsaktivitet genom att ange alla nödvändiga värden på ett ställe:

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

Anmärkning

Universella Windows-appar måste anropa RequestAccessAsync innan du registrerar någon av typerna av bakgrundsutlösare. För att säkerställa att den universella Windows-appen fortsätter att köras korrekt när du har släppt en uppdatering måste du anropa RemoveAccess och sedan anropa RequestAccessAsync- när appen startas efter att ha uppdaterats. Mer information finns i Riktlinjer för bakgrundsaktiviteter.

För pågående bakgrundsaktiviteter anger du inte TaskEntryPoint. Om du lämnar den tom aktiveras standardstartpunkten, en ny skyddad metod i programobjektet som heter OnBackgroundActivated().

När en utlösare har registrerats utlöses den baserat på vilken typ av utlösare som angetts i metoden SetTrigger. I exemplet ovan används en TimeTrigger-, som utlöses femton minuter från den tidpunkt då den registrerades.

Lägg till ett villkor för att styra när aktiviteten ska köras (valfritt)

Du kan lägga till ett villkor för att styra när aktiviteten ska köras när utlösarhändelsen inträffar. Om du till exempel inte vill att aktiviteten ska köras förrän användaren finns använder du villkoret UserPresent. En lista över möjliga villkor finns i SystemConditionType.

Följande exempelkod tilldelar ett villkor som kräver att användaren finns:

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

Placera din bakgrundsaktivitetskod i OnBackgroundActivated()

Placera din bakgrundsaktivitetskod i OnBackgroundActivated för att svara på bakgrundsutlösaren när den utlöses. OnBackgroundActivated kan behandlas precis som IBackgroundTask.Run. Metoden har en BackgroundActivatedEventArgs parameter, som innehåller allt som metoden Kör levererar. Till exempel i 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);  
  }
}

Ett mer omfattande OnBackgroundActivated- exempel finns i Konvertera en apptjänst för att köras i samma process som värdappen.

Hantera förlopp och slutförande av bakgrundsaktivitet

Aktivitetsförlopp och slutförande kan övervakas på samma sätt som för bakgrundsaktiviteter med flera processer (se Övervaka bakgrundsaktivitetsförlopp och slutförande), men du kommer förmodligen att upptäcka att du enklare kan spåra dem med hjälp av variabler för att spåra status för förlopp eller slutförande i din app. Det här är en av fördelarna med att ha din bakgrundsaktivitetskod igång i samma process som din app.

Hantera annullering av bakgrundsaktivitet

Bakgrundsaktiviteter som är in-process avbryts på samma sätt som bakgrundsaktiviteter utanför processen (se Hantera en avbruten bakgrundsaktivitet). Tänk på att din BackgroundActivated händelsehanterare måste avslutas innan annulleringen sker, annars avslutas hela processen. Om förgrundsappen stängs oväntat när du avbryter bakgrundsaktiviteten kontrollerar du att hanteraren avslutades innan annulleringen inträffade.

Manifestet

Till skillnad från bakgrundsuppgifter utanför processen behöver du inte lägga till bakgrundsuppgiftsinformation i paketmanifestet för att kunna köra bakgrundsuppgifter i processen.

Sammanfattning och nästa steg

Nu bör du förstå grunderna i hur du skriver en pågående bakgrundsaktivitet.

Se följande relaterade ämnen för API-referens, konceptuell vägledning för bakgrundsaktiviteter och mer detaljerade instruktioner för att skriva appar som använder bakgrundsuppgifter.

Detaljerade instruktionsämnen för bakgrundsaktiviteter

Vägledning för bakgrundsuppgifter

API-referens för bakgrundsprocesser