Sdílet prostřednictvím


Vytvořte a zaregistrujte úlohu na pozadí probíhajícího procesu

důležitá rozhraní API

Toto téma ukazuje, jak vytvořit a zaregistrovat úlohu na pozadí, která běží ve stejném procesu jako vaše aplikace.

Úlohy na pozadí v procesu se snadněji implementují než úlohy na pozadí mimo proces. Jsou však méně odolné. Pokud kód běžící v procesu na pozadí zhavaruje, aplikace spadne. Všimněte si také, že DeviceUseTrigger, DeviceServicingTrigger a IoTStartupTask nelze použít s modelem v procesu. Aktivace úlohy na pozadí VoIP v rámci vaší aplikace také není možná. Tyto triggery a úlohy se stále podporují pomocí modelu úloh na pozadí mimo proces.

Mějte na paměti, že aktivitu na pozadí je možné ukončit i při spuštění v procesu v popředí aplikace, pokud překročí stanovené časové limity. Pro některé účely odolnosti oddělení práce na úlohu na pozadí, která běží v samostatném procesu, je stále užitečná. Udržování práce na pozadí jako úkolu odděleně od aplikace na popředí může být nejlepší volbou pro práci, která nevyžaduje komunikaci s aplikací na popředí.

Základy

Model v procesu vylepšuje životní cyklus aplikace s vylepšenými oznámeními o tom, kdy je vaše aplikace v popředí nebo na pozadí. Pro tyto přechody jsou k dispozici dvě nové události z objektu Aplikace: EnteredBackground a LeavingBackground. Tyto události se zapadají do životního cyklu aplikace na základě stavu viditelnosti vaší aplikace. Přečtěte si další informace o těchto událostech a o tom, jak ovlivňují životní cyklus aplikace v životním cyklu aplikace.

Na vysoké úrovni zpracujete událost EnteredBackground ke spuštění kódu, který se provádí, když vaše aplikace běží na pozadí, a zpracujete událost LeavingBackground, abyste zjistili, kdy se vaše aplikace přesunula do popředí.

Zaregistrujte spouštěč úlohy na pozadí

Aktivita na pozadí v procesu je zaregistrovaná podobně jako aktivita na pozadí mimo proces. Všechny triggery na pozadí začínají registrací pomocí BackgroundTaskBuilder. Tvůrce usnadňuje registraci úlohy na pozadí nastavením všech požadovaných hodnot na jednom místě:

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

Poznámka:

Univerzální aplikace pro Windows musí před registrací některého z typů triggerů na pozadí volat RequestAccessAsync. Pokud chcete zajistit, aby vaše univerzální aplikace pro Windows po vydání aktualizace fungovala správně, musíte po vydání aktualizace volat RemoveAccess a potom po aktualizaci volat RequestAccessAsync. Další informace naleznete v pokynech pro úlohy na pozadí (viz ).

U aktivit na pozadí v procesu nenastavíte TaskEntryPoint. Ponechání prázdné povolí výchozí vstupní bod, novou chráněnou metodu v objektu Aplikace s názvem OnBackgroundActivated().

Jakmile je trigger zaregistrovaný, aktivuje se na základě typu triggeru nastaveného v metodě SetTrigger. V příkladu výše se používá TimeTrigger, který se aktivuje patnáct minut od okamžiku registrace.

Přidání podmínky pro řízení, kdy se úloha spustí (volitelné)

Můžete přidat podmínku pro řízení spuštění úlohy po aktivaci události. Pokud například nechcete, aby úloha běžela, dokud uživatel není k dispozici, použijte podmínku UserPresent. Seznam možných podmínek naleznete v části SystemConditionType.

Následující ukázkový kód přiřadí podmínku, která vyžaduje, aby uživatel byl přítomný:

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

Umístěte svůj kód aktivity na pozadí do OnBackgroundActivated().

Vložte kód aktivity na pozadí do OnBackgroundActivated, aby při aktivaci reagoval na aktivační událost na pozadí. OnBackgroundActivated lze považovat za IBackgroundTask.Run. Metoda má parametr BackgroundActivatedEventArgs, který obsahuje vše, co metoda Run poskytuje. Například v 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);  
  }
}

Podrobnější OnBackgroundActivated příklad najdete v tématu Převod služby App Service tak, aby běžela ve stejném procesu jako její hostitelská aplikace.

Správa průběhu a dokončení úkolů na pozadí

Průběh a dokončení úkolů je možné monitorovat stejným způsobem jako u úloh na pozadí s více procesy (viz Monitorování průběhu úkolů na pozadí a dokončení), ale pravděpodobně zjistíte, že je můžete snadněji sledovat pomocí proměnných ke sledování průběhu nebo stavu dokončení v aplikaci. Toto je jedna z výhod, kdy kód aktivity na pozadí běží ve stejném procesu jako vaše aplikace.

Řešení zrušení úlohy na pozadí

Úlohy na pozadí v procesu jsou zrušeny stejným způsobem jako úkoly na pozadí mimo proces (viz Zpracování zrušené úlohy na pozadí). Mějte na paměti, že vaše událost BackgroundActivated musí být ukončena dříve, než dojde ke zrušení, jinak bude celý proces ukončen. Pokud se vaše aplikace v popředí neočekávaně zavře při zrušení úlohy běžící na pozadí, ověřte, že se obslužná rutina ukončila před zrušením.

Manifest

Na rozdíl od úloh na pozadí mimo proces nemusíte do manifestu balíčku přidávat informace o úlohách na pozadí, aby bylo možné spouštět úlohy na pozadí procesu.

Shrnutí a další kroky

Teď byste měli rozumět základům, jak napsat úlohu na pozadí procesu.

V následujících souvisejících tématech najdete referenční informace k rozhraní API, koncepční pokyny k úlohám na pozadí a podrobnější pokyny pro psaní aplikací, které používají úlohy na pozadí.

Podrobná instruktážní témata pro úlohy na pozadí

Pokyny k úlohám na pozadí

Referenční rozhraní API pro úlohy na pozadí