Mendeklarasikan tugas latar belakang dalam manifes aplikasi

API penting

Aktifkan penggunaan tugas latar belakang dengan mendeklarasikannya sebagai ekstensi dalam manifes aplikasi.

Penting

Artikel ini khusus untuk tugas latar belakang yang tidak diproses. Tugas latar belakang dalam proses tidak dideklarasikan dalam manifes.

Tugas latar belakang di luar proses harus dideklarasikan dalam manifes aplikasi atau aplikasi Anda tidak akan dapat mendaftarkannya (pengecualian akan dilemparkan). Selain itu, tugas latar belakang di luar proses harus dideklarasikan dalam manifes aplikasi untuk lulus sertifikasi.

Topik ini mengasumsikan Anda memiliki satu atau beberapa kelas tugas latar belakang yang dibuat, dan bahwa aplikasi Anda mendaftarkan setiap tugas latar belakang untuk dijalankan sebagai respons terhadap setidaknya satu pemicu.

Tambahkan Ekstensi Secara Manual

Buka manifes aplikasi (Package.appxmanifest) dan buka elemen Aplikasi. Buat elemen Extensions (jika belum ada).

Cuplikan berikut diambil dari sampel tugas latar belakang:

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

Tambahkan Ekstensi Tugas Latar Belakang

Nyatakan tugas latar belakang pertama Anda.

Salin kode ini ke dalam elemen Extensions (Anda akan menambahkan atribut dalam langkah-langkah berikut).

<Extensions>
    <Extension Category="windows.backgroundTasks" EntryPoint="">
      <BackgroundTasks>
        <Task Type="" />
      </BackgroundTasks>
    </Extension>
</Extensions>
  1. Ubah atribut EntryPoint agar memiliki string yang sama yang digunakan oleh kode Anda sebagai titik masuk saat mendaftarkan tugas latar belakang Anda (namespace.classname).

    Dalam contoh ini, titik masuknya adalah ExampleBackgroundTaskNameSpace.ExampleBackgroundTaskClassName:

<Extensions>
    <Extension Category="windows.backgroundTasks" EntryPoint="Tasks.ExampleBackgroundTaskClassName">
       <BackgroundTasks>
         <Task Type="" />
       </BackgroundTasks>
    </Extension>
</Extensions>
  1. Ubah daftar atribut Jenis Tugas untuk menunjukkan tipe pendaftaran tugas yang digunakan dengan tugas latar belakang ini. Jika tugas latar belakang terdaftar dengan beberapa jenis pemicu, tambahkan elemen Tugas tambahan dan atribut Jenis untuk masing-masing jenis.

    Catatan Pastikan untuk mencantumkan setiap jenis pemicu yang Anda gunakan, atau tugas latar belakang tidak akan mendaftar dengan jenis pemicu yang tidak dinyatakan (metode Register akan gagal dan melemparkan pengecualian).

    Contoh cuplikan ini menunjukkan penggunaan pemicu peristiwa sistem dan pemberitahuan push:

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

Menambahkan beberapa ekstensi tugas latar belakang

Ulangi langkah 2 untuk setiap kelas tugas latar belakang tambahan yang didaftarkan oleh aplikasi Anda.

Contoh berikut adalah elemen Aplikasi lengkap dari sampel tugas latar belakang. Ini menunjukkan penggunaan 2 kelas tugas latar belakang dengan total 3 jenis pemicu. Salin bagian Ekstensi dari contoh ini, dan ubah sesuai kebutuhan, untuk mendeklarasikan tugas latar belakang dalam manifes aplikasi Anda.

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

Nyatakan di mana tugas latar belakang Anda akan berjalan

Anda dapat menentukan tempat tugas latar belakang Anda berjalan:

  • Secara default, mereka berjalan dalam proses BackgroundTaskHost.exe.
  • Dalam proses yang sama dengan aplikasi latar depan Anda.
  • Gunakan ResourceGroup untuk menempatkan beberapa tugas latar belakang ke dalam proses hosting yang sama, atau untuk memisahkannya ke dalam proses yang berbeda.
  • Gunakan SupportsMultipleInstances untuk menjalankan proses latar belakang dalam proses baru yang mendapatkan batas sumber daya sendiri (memori, cpu) setiap kali pemicu baru diaktifkan.

Jalankan dalam proses yang sama dengan aplikasi latar depan Anda

Berikut adalah contoh XML yang mendeklarasikan tugas latar belakang yang berjalan dalam proses yang sama dengan aplikasi latar depan.

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

Saat Anda menentukan EntryPoint, aplikasi Anda menerima panggilan balik ke metode yang ditentukan saat pemicu diaktifkan. Jika Anda tidak menentukan EntryPoint, aplikasi Anda menerima panggilan balik melalui OnBackgroundActivated(). Lihat Membuat dan mendaftarkan tugas latar belakang dalam proses untuk detailnya.

Tentukan di mana tugas latar belakang Anda berjalan dengan atribut ResourceGroup.

Berikut adalah contoh XML yang mendeklarasikan tugas latar belakang yang berjalan dalam proses BackgroundTaskHost.exe, tetapi dalam satu contoh terpisah dari instans tugas latar belakang lainnya dari aplikasi yang sama. ResourceGroup Perhatikan atribut , yang mengidentifikasi tugas latar belakang mana yang akan berjalan bersama-sama.

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

Jalankan dalam proses baru setiap kali pemicu diaktifkan dengan atribut SupportsMultipleInstances

Contoh ini mendeklarasikan tugas latar belakang yang berjalan dalam proses baru yang mendapatkan batas sumber dayanya sendiri (memori dan CPU) setiap kali pemicu baru diaktifkan. Perhatikan penggunaan SupportsMultipleInstances yang memungkinkan perilaku ini. Untuk menggunakan atribut ini, Anda harus menargetkan SDK versi '10.0.15063' (Windows 10 Creators Update) atau yang lebih baru.

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

Catatan

Anda tidak dapat menentukan ResourceGroup atau ServerName bersama dengan SupportsMultipleInstances.