Dichiarare le attività in background nel manifesto dell'applicazione

API importanti

È possibile abilitare l’uso delle attività in background dichiarandole come estensioni nel manifesto dell’app.

Importante

Questo articolo è specifico per le attività in background out-of-process. Le attività in background in-process non vengono dichiarate nel manifesto.

Le attività in background out-of-process devono essere dichiarate nel manifesto dell'app oppure l'app non sarà in grado di registrarle (verrà generata un'eccezione). Inoltre, le attività in background out-of-process devono essere dichiarate nel manifesto dell'applicazione per passare la certificazione.

Questo argomento presuppone che si siano create una o più classi di attività in background e che l'app registri ogni attività in background da eseguire in risposta ad almeno un trigger.

Aggiungere manualmente le estensioni

Aprire il manifesto dell'applicazione (Package.appxmanifest) e passare all'elemento Application. Creare un elemento Extensions (se non esiste già).

Il frammento di codice seguente è tratto dall'esempio di attività in background:

<Application Id="App"
   ...
   <Extensions>
     <Extension Category="windows.backgroundTasks" EntryPoint="Tasks.SampleBackgroundTask">
       <BackgroundTasks>
         <Task Type="systemEvent" />
         <Task Type="timer" />
       </BackgroundTasks>
     </Extension>
     <Extension Category="windows.backgroundTasks" EntryPoint="Tasks.ServicingComplete">
       <BackgroundTasks>
         <Task Type="systemEvent"/>
       </BackgroundTasks>
     </Extension>
   </Extensions>
 </Application>

Aggiungere un'estensione dell'attività in background

Dichiarare la prima attività in background.

Copiare questo codice nell'elemento Extensions (aggiungere gli attributi nei passaggi seguenti).

<Extensions>
    <Extension Category="windows.backgroundTasks" EntryPoint="">
      <BackgroundTasks>
        <Task Type="" />
      </BackgroundTasks>
    </Extension>
</Extensions>
  1. Modificare l'attributo EntryPoint in modo che la stessa stringa usata dal codice del punto di ingresso durante la registrazione dell'attività in background (namespace.classname).

    In questo esempio il punto di ingresso è ExampleBackgroundTaskNameSpace.ExampleBackgroundTaskClassName:

<Extensions>
    <Extension Category="windows.backgroundTasks" EntryPoint="Tasks.ExampleBackgroundTaskClassName">
       <BackgroundTasks>
         <Task Type="" />
       </BackgroundTasks>
    </Extension>
</Extensions>
  1. Modificare l'elenco dell'attributo Tipo di attività per indicare il tipo di registrazione dell'attività usata con questa attività in background. Se l'attività in background viene registrata con più tipi di trigger, aggiungere altri elementi Task e attributi Type per ognuno di essi.

    Nota Assicurarsi di elencare ogni tipo di trigger in uso oppure l'attività in background non verrà registrata con i tipi di trigger non dichiarati (il metodo Register avrà esito negativo e genererà un'eccezione).

    Questo esempio di frammento di codice indica l'uso di trigger di eventi di sistema e notifiche push:

<Extension Category="windows.backgroundTasks" EntryPoint="Tasks.BackgroundTaskClass">
    <BackgroundTasks>
        <Task Type="systemEvent" />
        <Task Type="pushNotification" />
    </BackgroundTasks>
</Extension>

Aggiungere più estensioni di attività in background

Ripetere il passaggio 2 per ogni classe di attività in background aggiuntiva registrata dall'app.

L'esempio seguente è l'elemento Application completo dell'esempio di attività in background. Viene illustrato l'uso di 2 classi di attività in background con un totale di 3 tipi di trigger. Copiare la sezione Estensioni di questo esempio e modificarla in base alle esigenze per dichiarare le attività in background nel manifesto dell'applicazione.

<Applications>
    <Application Id="App"
      Executable="$targetnametoken$.exe"
      EntryPoint="BackgroundTask.App">
        <uap:VisualElements
          DisplayName="BackgroundTask"
          Square150x150Logo="Assets\StoreLogo-sdk.png"
          Square44x44Logo="Assets\SmallTile-sdk.png"
          Description="BackgroundTask"

          BackgroundColor="#00b2f0">
          <uap:LockScreen Notification="badgeAndTileText" BadgeLogo="Assets\smalltile-Windows-sdk.png" />
            <uap:SplashScreen Image="Assets\Splash-sdk.png" />
            <uap:DefaultTile DefaultSize="square150x150Logo" Wide310x150Logo="Assets\tile-sdk.png" >
                <uap:ShowNameOnTiles>
                    <uap:ShowOn Tile="square150x150Logo" />
                    <uap:ShowOn Tile="wide310x150Logo" />
                </uap:ShowNameOnTiles>
            </uap:DefaultTile>
        </uap:VisualElements>

      <Extensions>
        <Extension Category="windows.backgroundTasks" EntryPoint="Tasks.SampleBackgroundTask">
          <BackgroundTasks>
            <Task Type="systemEvent" />
            <Task Type="timer" />
          </BackgroundTasks>
        </Extension>
        <Extension Category="windows.backgroundTasks" EntryPoint="Tasks.ServicingComplete">
          <BackgroundTasks>
            <Task Type="systemEvent"/>
          </BackgroundTasks>
        </Extension>
      </Extensions>
    </Application>
</Applications>

Dichiarare dove verrà eseguita l'attività in background

È possibile specificare dove vengono eseguite le attività in background:

  • Per impostazione predefinita, vengono eseguiti nel processo di BackgroundTaskHost.exe.
  • Nello stesso processo dell'applicazione in primo piano.
  • Usare ResourceGroup per inserire più attività in background nello stesso processo di hosting o separarle in processi diversi.
  • Usare SupportsMultipleInstances per eseguire il processo in background in un nuovo processo che ottiene i propri limiti di risorse (memoria, CPU) ogni volta che viene attivato un nuovo trigger.

Eseguirlo nello stesso processo dell'applicazione in primo piano

Di seguito è riportato un codice XML di esempio che dichiara un'attività in background eseguita nello stesso processo dell'applicazione in primo piano.

<Extensions>
    <Extension Category="windows.backgroundTasks" EntryPoint="ExecModelTestBackgroundTasks.ApplicationTriggerTask">
        <BackgroundTasks>
            <Task Type="systemEvent" />
        </BackgroundTasks>
    </Extension>
</Extensions>

Quando si specifica EntryPoint, l'applicazione riceve un callback al metodo specificato quando il trigger viene attivato. Se non si specifica un EntryPoint, l'applicazione riceve il callback tramite OnBackgroundActivated(). Vedere Creare e registrare un'attività in background in-process per i dettagli.

Specificare dove viene eseguita l'attività in background con l'attributo ResourceGroup.

Di seguito è riportato un codice XML di esempio che dichiara un'attività in background eseguita in un processo di BackgroundTaskHost.exe, ma in un'altra istanza di attività in background dalla stessa app. Si noti l'attributo ResourceGroup, che identifica le attività in background che verranno eseguite insieme.

<Extensions>
    <Extension Category="windows.backgroundTasks" EntryPoint="BackgroundTasks.SessionConnectedTriggerTask" ResourceGroup="foo">
      <BackgroundTasks>
        <Task Type="systemEvent" />
      </BackgroundTasks>
    </Extension>
    <Extension Category="windows.backgroundTasks" EntryPoint="BackgroundTasks.TimeZoneTriggerTask" ResourceGroup="foo">
      <BackgroundTasks>
        <Task Type="systemEvent" />
      </BackgroundTasks>
    </Extension>
    <Extension Category="windows.backgroundTasks" EntryPoint="BackgroundTasks.TimerTriggerTask" ResourceGroup="bar">
      <BackgroundTasks>
        <Task Type="timer" />
      </BackgroundTasks>
    </Extension>
    <Extension Category="windows.backgroundTasks" EntryPoint="BackgroundTasks.ApplicationTriggerTask" ResourceGroup="bar">
      <BackgroundTasks>
        <Task Type="general" />
      </BackgroundTasks>
    </Extension>
    <Extension Category="windows.backgroundTasks" EntryPoint="BackgroundTasks.MaintenanceTriggerTask" ResourceGroup="foobar">
      <BackgroundTasks>
        <Task Type="general" />
      </BackgroundTasks>
    </Extension>
</Extensions>

Eseguire in un nuovo processo ogni volta che viene generato un trigger con l'attributo SupportsMultipleInstances

Questo esempio dichiara un'attività in background che viene eseguita in un nuovo processo che ottiene i propri limiti di risorse (memoria e CPU) ogni volta che viene attivato un nuovo trigger. Si noti l'uso di SupportsMultipleInstances che abilita questo comportamento. Per usare questo attributo, è necessario usare la versione DELL'SDK di destinazione '10.0.15063' (Windows 10 Creators Update) o versioni successive.

<Package
    xmlns:uap4="http://schemas.microsoft.com/appx/manifest/uap/windows10/4"
    ...
    <Applications>
        <Application ...>
            ...
            <Extensions>
                <Extension Category="windows.backgroundTasks" EntryPoint="BackgroundTasks.TimerTriggerTask">
                    <BackgroundTasks uap4:SupportsMultipleInstances="true">
                        <Task Type="timer" />
                    </BackgroundTasks>
                </Extension>
            </Extensions>
        </Application>
    </Applications>

Nota

Non è possibile specificare ResourceGroup o ServerName in combinazione con SupportsMultipleInstances.