Bagikan melalui


Menjalankan tugas latar belakang pada timer

Pelajari cara menggunakan TimeTrigger untuk menjadwalkan tugas latar belakang satu kali, atau menjalankan tugas latar belakang berkala.

Lihat Skenario4 dalam sampel aktivasi Latar Belakang untuk melihat contoh cara menerapkan tugas latar belakang yang dipicu waktu yang dijelaskan dalam topik ini.

Topik ini mengasumsikan bahwa Anda memiliki tugas latar belakang yang perlu dijalankan secara berkala, atau pada waktu tertentu. Jika Anda belum memiliki tugas latar belakang, ada contoh tugas latar belakang di BackgroundActivity.cs. Atau, ikuti langkah-langkah dalam Membuat dan mendaftarkan tugas latar belakang dalam proses atau Membuat dan mendaftarkan tugas latar belakang di luar proses untuk membuatnya.

Membuat pemicu waktu

Buat TimeTrigger baru. Parameter kedua, OneShot, menentukan apakah tugas latar belakang hanya akan berjalan sekali atau terus berjalan secara berkala. Jika OneShot diatur ke true, parameter pertama (FreshnessTime) menentukan jumlah menit untuk menunggu sebelum menjadwalkan tugas latar belakang. Jika OneShot diatur ke false, FreshnessTime menentukan frekuensi di mana tugas latar belakang akan berjalan.

Timer bawaan untuk aplikasi Platform Windows Universal (UWP) yang menargetkan keluarga desktop atau perangkat seluler menjalankan tugas latar belakang dalam interval 15 menit. (Timer berjalan dalam interval 15 menit sehingga sistem hanya perlu bangun setiap 15 menit sekali untuk membangunkan aplikasi yang telah meminta TimerTriggers--yang menghemat daya.)

  • Jika FreshnessTime diatur ke 15 menit dan OneShot benar, tugas akan dijadwalkan untuk dijalankan sekali mulai antara 15 dan 30 menit sejak terdaftar. Jika diatur ke 25 menit dan OneShot benar, tugas akan dijadwalkan untuk dijalankan sekali mulai antara 25 dan 40 menit sejak terdaftar.

  • Jika FreshnessTime diatur ke 15 menit dan OneShot salah, tugas akan dijadwalkan untuk berjalan setiap 15 menit mulai antara 15 dan 30 menit sejak terdaftar. Jika diatur ke n menit dan OneShot salah, tugas akan dijadwalkan untuk dijalankan setiap n menit dimulai antara n dan n + 15 menit setelah terdaftar.

Catatan

Jika FreshnessTime diatur ke kurang dari 15 menit, pengecualian akan dilemparkan saat mencoba mendaftarkan tugas latar belakang.

Misalnya, pemicu ini akan menyebabkan tugas latar belakang berjalan satu jam sekali.

TimeTrigger hourlyTrigger = new TimeTrigger(60, false);
Windows::ApplicationModel::Background::TimeTrigger hourlyTrigger{ 60, false };
TimeTrigger ^ hourlyTrigger = ref new TimeTrigger(60, false);

(Opsional) Menambahkan kondisi

Anda dapat membuat kondisi tugas latar belakang untuk mengontrol kapan tugas berjalan. Kondisi mencegah tugas latar belakang berjalan hingga kondisi terpenuhi. Untuk informasi selengkapnya, lihat Mengatur kondisi untuk menjalankan tugas latar belakang.

Dalam contoh ini, kondisi diatur ke UserPresent sehingga, setelah dipicu, tugas hanya berjalan setelah pengguna aktif. Untuk daftar kemungkinan kondisi, lihat SystemConditionType.

SystemCondition userCondition = new SystemCondition(SystemConditionType.UserPresent);
Windows::ApplicationModel::Background::SystemCondition userCondition{
    Windows::ApplicationModel::Background::SystemConditionType::UserPresent };
SystemCondition ^ userCondition = ref new SystemCondition(SystemConditionType::UserPresent);

Untuk informasi lebih mendalam tentang kondisi dan jenis pemicu latar belakang, lihat Mendukung aplikasi Anda dengan tugas latar belakang.

Panggil RequestAccessAsync()

Sebelum mendaftarkan tugas latar belakang ApplicationTrigger , panggil RequestAccessAsync untuk menentukan tingkat aktivitas latar belakang yang diizinkan pengguna karena pengguna mungkin telah menonaktifkan aktivitas latar belakang untuk aplikasi Anda. Lihat Mengoptimalkan aktivitas latar belakang untuk informasi selengkapnya tentang cara pengguna dapat mengontrol pengaturan untuk aktivitas latar belakang.

var requestStatus = await Windows.ApplicationModel.Background.BackgroundExecutionManager.RequestAccessAsync();
if (requestStatus != BackgroundAccessStatus.AlwaysAllowed)
{
    // Depending on the value of requestStatus, provide an appropriate response
    // such as notifying the user which functionality won't work as expected
}

Daftarkan tugas latar belakang

Daftarkan tugas latar belakang dengan memanggil fungsi pendaftaran tugas latar belakang Anda. Untuk informasi selengkapnya tentang mendaftarkan tugas latar belakang, dan untuk melihat definisi metode RegisterBackgroundTask() dalam kode sampel di bawah ini, lihat Mendaftarkan tugas latar belakang.

Penting

Untuk tugas latar belakang yang berjalan dalam proses yang sama dengan aplikasi Anda, jangan atur entryPoint. Untuk tugas latar belakang yang berjalan dalam proses terpisah dari aplikasi Anda, atur entryPoint menjadi namespace, '.', dan nama kelas yang berisi implementasi tugas latar belakang Anda.

string entryPoint = "Tasks.ExampleBackgroundTaskClass";
string taskName   = "Example hourly background task";

BackgroundTaskRegistration task = RegisterBackgroundTask(entryPoint, taskName, hourlyTrigger, userCondition);
std::wstring entryPoint{ L"Tasks.ExampleBackgroundTaskClass" };
std::wstring taskName{ L"Example hourly background task" };

Windows::ApplicationModel::Background::BackgroundTaskRegistration task{
    RegisterBackgroundTask(entryPoint, taskName, hourlyTrigger, userCondition) };
String ^ entryPoint = "Tasks.ExampleBackgroundTaskClass";
String ^ taskName   = "Example hourly background task";

BackgroundTaskRegistration ^ task = RegisterBackgroundTask(entryPoint, taskName, hourlyTrigger, userCondition);

Parameter pendaftaran tugas latar belakang divalidasi pada saat pendaftaran. Kesalahan dikembalikan jika salah satu parameter pendaftaran tidak valid. Pastikan aplikasi Anda dengan anggun menangani skenario di mana pendaftaran tugas latar belakang gagal - jika sebaliknya aplikasi Anda bergantung pada memiliki objek pendaftaran yang valid setelah mencoba mendaftarkan tugas, itu mungkin crash.

Mengelola sumber daya untuk tugas latar belakang Anda

Gunakan BackgroundExecutionManager.RequestAccessAsync untuk menentukan apakah pengguna telah memutuskan bahwa aktivitas latar belakang aplikasi Anda harus dibatasi. Waspadai penggunaan baterai Anda dan hanya berjalan di latar belakang ketika perlu untuk menyelesaikan tindakan yang diinginkan pengguna. Lihat Mengoptimalkan aktivitas latar belakang untuk informasi selengkapnya tentang cara pengguna dapat mengontrol pengaturan untuk aktivitas latar belakang.

  • Memori: Menyetel memori dan penggunaan energi aplikasi Anda adalah kunci untuk memastikan bahwa sistem operasi akan memungkinkan tugas latar belakang Anda berjalan. Gunakan API Manajemen Memori untuk melihat berapa banyak memori yang digunakan tugas latar belakang Anda. Semakin banyak memori yang digunakan tugas latar belakang Anda, semakin sulit bagi OS untuk membuatnya tetap berjalan ketika aplikasi lain berada di latar depan. Pengguna pada akhirnya mengontrol semua aktivitas latar belakang yang dapat dilakukan aplikasi Anda dan memiliki visibilitas pada dampak yang dialukan aplikasi Anda terhadap penggunaan baterai.
  • Waktu CPU: Tugas latar belakang dibatasi oleh jumlah waktu penggunaan jam dinding yang mereka dapatkan berdasarkan jenis pemicu.

Lihat Mendukung aplikasi Anda dengan tugas latar belakang untuk batasan sumber daya yang diterapkan ke tugas latar belakang.

Keterangan

Dimulai dengan Windows 10, pengguna tidak lagi perlu menambahkan aplikasi Anda ke layar kunci untuk menggunakan tugas latar belakang.

Tugas latar belakang hanya akan berjalan menggunakan TimeTrigger jika Anda telah memanggil RequestAccessAsync terlebih dahulu.