Bagikan melalui


Panduan untuk tugas latar belakang

Pastikan aplikasi Anda memenuhi persyaratan untuk menjalankan tugas latar belakang.

Panduan tugas latar belakang

Pertimbangkan panduan berikut saat mengembangkan tugas latar belakang Anda, dan sebelum menerbitkan aplikasi Anda.

Jika Anda menggunakan tugas latar belakang untuk memutar media di latar belakang, lihat Memutar media di latar belakang untuk informasi tentang peningkatan di Windows 10, versi 1607, yang membuatnya jauh lebih mudah.

Tugas latar belakang dalam proses versus di luar proses: Windows 10, versi 1607, memperkenalkan tugas latar belakang dalam proses yang memungkinkan Anda menjalankan kode latar belakang dalam proses yang sama dengan aplikasi latar depan Anda. Pertimbangkan faktor-faktor berikut saat memutuskan apakah akan memiliki tugas latar belakang dalam proses vs. di luar proses:

Pertimbangan Dampak
Ketahanan Jika proses latar belakang Anda berjalan dalam proses lain, crash dalam proses latar belakang Anda tidak akan menghapus aplikasi latar depan Anda. Selain itu, aktivitas latar belakang dapat dihentikan, bahkan dalam aplikasi Anda, jika berjalan melewati batas waktu eksekusi. Memisahkan pekerjaan latar belakang menjadi tugas yang terpisah dari aplikasi latar depan mungkin menjadi pilihan yang lebih baik ketika tidak diperlukan untuk proses latar depan dan latar belakang untuk berkomunikasi satu sama lain (karena salah satu keuntungan utama dari tugas latar belakang dalam proses adalah bahwa mereka menghapus kebutuhan untuk komunikasi antar-proses).
Kesederhanaan Tugas latar belakang dalam proses tidak memerlukan komunikasi lintas proses dan kurang kompleks untuk ditulis.
Pemicu yang tersedia Tugas latar belakang dalam proses tidak mendukung pemicu berikut: DeviceUseTrigger, DeviceServicingTrigger dan IoTStartupTask.
VoIP Tugas latar belakang dalam proses tidak mendukung pengaktifan tugas latar belakang VoIP dalam aplikasi Anda.

Batasan jumlah instans pemicu: Ada batasan jumlah instans dari beberapa pemicu yang dapat didaftarkan aplikasi. Aplikasi hanya dapat mendaftarkan ApplicationTrigger, MediaProcessingTrigger , dan DeviceUseTrigger sekali per instans aplikasi. Jika aplikasi melewati batas ini, pendaftaran akan melemparkan pengecualian.

Kuota CPU: Tugas latar belakang dibatasi oleh jumlah waktu penggunaan jam dinding yang mereka dapatkan berdasarkan jenis pemicu. Sebagian besar pemicu dibatasi hingga 30 detik penggunaan jam dinding, sementara beberapa memiliki kemampuan untuk menjalankan hingga 10 menit untuk menyelesaikan tugas intensif. Tugas latar belakang harus ringan untuk menghemat masa pakai baterai dan memberikan pengalaman pengguna yang lebih baik untuk aplikasi latar depan. Lihat Mendukung aplikasi Anda dengan tugas latar belakang untuk batasan sumber daya yang diterapkan ke tugas latar belakang.

Mengelola tugas latar belakang: Aplikasi Anda harus mendapatkan daftar tugas latar belakang terdaftar, mendaftar untuk penanganan kemajuan dan penyelesaian, dan menangani peristiwa tersebut dengan tepat. Kelas tugas latar belakang Anda harus melaporkan kemajuan, pembatalan, dan penyelesaian. Untuk informasi selengkapnya lihat Menangani tugas latar belakang yang dibatalkan, dan Memantau kemajuan dan penyelesaian tugas latar belakang.

Gunakan BackgroundTaskDeferral: Jika kelas tugas latar belakang Anda menjalankan kode asinkron, pastikan untuk menggunakan deferral. Jika tidak, tugas latar belakang Anda dapat dihentikan sebelum waktunya ketika metode Jalankan kembali (atau metode OnBackgroundActivated dalam kasus tugas latar belakang dalam proses). Untuk informasi selengkapnya, lihat Membuat dan mendaftarkan tugas latar belakang di luar proses.

Atau, minta satu penolakan, dan gunakan asinkron/tunggu untuk menyelesaikan panggilan metode asinkron. Tutup deferral setelah metode tunggu memanggil.

Perbarui manifes aplikasi: Untuk tugas latar belakang yang berjalan di luar proses, deklarasikan setiap tugas latar belakang dalam manifes aplikasi, bersama dengan jenis pemicu yang digunakannya. Jika tidak, aplikasi Anda tidak akan dapat mendaftarkan tugas latar belakang saat runtime.

Jika Anda memiliki beberapa tugas latar belakang, pertimbangkan apakah tugas tersebut harus berjalan dalam proses host yang sama atau dipisahkan ke dalam proses host yang berbeda. Letakkan dalam proses host terpisah jika Anda khawatir bahwa kegagalan dalam satu tugas latar belakang dapat menurunkan tugas latar belakang lainnya. Gunakan entri Grup sumber daya di perancang manifes untuk mengelompokkan tugas latar belakang ke dalam proses host yang berbeda.

Untuk mengatur Grup sumber daya, buka perancang Package.appxmanifest, pilih Deklarasi, dan tambahkan deklarasi App Service :

Pengaturan grup sumber daya

Lihat referensi skema aplikasi untuk informasi selengkapnya tentang pengaturan grup sumber daya.

Tugas latar belakang yang berjalan dalam proses yang sama dengan aplikasi latar depan tidak perlu mendeklarasikan diri mereka dalam manifes aplikasi. Untuk informasi selengkapnya tentang mendeklarasikan tugas latar belakang yang berjalan di luar proses dalam manifes, lihat Mendeklarasikan tugas latar belakang dalam manifes aplikasi.

Bersiap untuk pembaruan aplikasi: Jika aplikasi Anda akan diperbarui, buat dan daftarkan tugas latar belakang ServicingComplete (lihat SystemTriggerType) untuk membatalkan pendaftaran tugas latar belakang untuk versi aplikasi sebelumnya, dan daftarkan tugas latar belakang untuk versi baru. Ini juga merupakan waktu yang tepat untuk melakukan pembaruan aplikasi yang mungkin diperlukan di luar konteks berjalan di latar depan.

Permintaan untuk menjalankan tugas latar belakang:

Penting Dimulai di Windows 10, aplikasi tidak lagi diharuskan berada di layar kunci sebagai prasyarat untuk menjalankan tugas latar belakang.

aplikasi Platform Windows Universal (UWP) dapat menjalankan semua jenis tugas yang didukung tanpa disematkan ke layar kunci. Namun, aplikasi harus memanggil GetAccessState dan memeriksa apakah aplikasi tidak ditolak untuk berjalan di latar belakang. Pastikan bahwa GetAccessStatus tidak mengembalikan salah satu enum BackgroundAccessStatus yang ditolak. Misalnya, metode ini akan mengembalikan BackgroundAccessStatus.DeniedByUser jika pengguna secara eksplisit menolak izin tugas latar belakang untuk aplikasi Anda di pengaturan perangkat.

Jika aplikasi Anda ditolak agar tidak berjalan di latar belakang, aplikasi Anda harus memanggil RequestAccessAsync dan memastikan respons tidak ditolak sebelum mendaftarkan tugas latar belakang.

Untuk informasi selengkapnya tentang pilihan pengguna di sekitar aktivitas latar belakang dan Penghemat Baterai, lihat Mengoptimalkan Aktivitas Latar Belakang.

Daftar periksa tugas latar belakang

Berlaku untuk tugas latar belakang dalam proses dan di luar proses

  • Kaitkan tugas latar belakang Anda dengan pemicu yang benar.
  • Tambahkan kondisi untuk membantu memastikan tugas latar belakang Anda berhasil dijalankan.
  • Menangani kemajuan, penyelesaian, dan pembatalan tugas latar belakang.
  • Daftarkan ulang tugas latar belakang Anda selama peluncuran aplikasi. Ini memastikan bahwa mereka terdaftar saat pertama kali aplikasi diluncurkan. Ini juga menyediakan cara untuk mendeteksi apakah pengguna telah menonaktifkan kemampuan eksekusi latar belakang aplikasi Anda (dalam pendaftaran peristiwa gagal).
  • Periksa kesalahan pendaftaran tugas latar belakang. Jika sesuai, coba daftarkan tugas latar belakang lagi dengan nilai parameter yang berbeda.
  • Untuk semua keluarga perangkat kecuali desktop, jika perangkat menjadi rendah memori, tugas latar belakang dapat dihentikan. Jika pengecualian kehabisan memori tidak muncul, atau aplikasi tidak menanganinya, maka tugas latar belakang akan dihentikan tanpa peringatan dan tanpa menaikkan peristiwa OnCanceled. Ini membantu memastikan pengalaman pengguna aplikasi di latar depan. Tugas latar belakang Anda harus dirancang untuk menangani skenario ini.

Hanya berlaku untuk tugas latar belakang di luar proses

  • Buat tugas latar belakang Anda di komponen Windows Runtime.
  • Jangan tampilkan UI selain pembaruan toast, petak peta, dan lencana dari tugas latar belakang.
  • Dalam metode Jalankan, minta deferral untuk setiap panggilan metode asinkron, dan tutup ketika metode selesai. Atau, gunakan satu deferral dengan asinkron/tunggu.
  • Gunakan penyimpanan persisten untuk berbagi data antara tugas latar belakang dan aplikasi.
  • Deklarasikan setiap tugas latar belakang dalam manifes aplikasi, bersama dengan jenis pemicu yang digunakannya. Pastikan titik masuk dan jenis pemicu sudah benar.
  • Jangan tentukan elemen Executable dalam manifes kecuali Anda menggunakan pemicu yang harus dijalankan dalam konteks yang sama dengan aplikasi (seperti ControlChannelTrigger).

Hanya berlaku untuk tugas latar belakang dalam proses

  • Saat membatalkan tugas, pastikan bahwa BackgroundActivated penanganan aktivitas keluar sebelum pembatalan terjadi atau seluruh proses akan dihentikan.
  • Tulis tugas latar belakang yang berumur pendek. Sebagian besar tugas latar belakang dibatasi hingga 30 detik penggunaan jam dinding.

Hal-hal yang harus dihindari

  • Minimalkan penggunaan komunikasi antarproses melalui COM atau RPC.
  • Proses yang Anda coba komunikasikan mungkin tidak dalam keadaan berjalan yang dapat mengakibatkan macet.
  • Sejumlah besar waktu dapat dihabiskan untuk memfasilitasi komunikasi lintas proses, dan akan dihitung terhadap waktu yang dialokasikan untuk menjalankan tugas latar belakang Anda.
  • Jangan mengandalkan interaksi pengguna dalam tugas latar belakang.