Mengatur kondisi untuk menjalankan tugas latar belakang

API penting

Pelajari cara mengatur kondisi yang mengontrol kapan tugas latar belakang Anda akan berjalan.

Terkadang, tugas latar belakang memerlukan kondisi tertentu untuk dipenuhi agar tugas latar belakang berhasil. Anda dapat menentukan satu atau beberapa kondisi yang ditentukan oleh SystemConditionType saat mendaftarkan tugas latar belakang Anda. Kondisi akan diperiksa setelah pemicu diaktifkan. Tugas latar belakang kemudian akan diantrekan, tetapi tidak akan berjalan sampai semua kondisi yang diperlukan terpenuhi.

Menempatkan kondisi pada tugas latar belakang menghemat masa pakai baterai dan CPU dengan mencegah tugas berjalan tidak perlu. Misalnya, jika tugas latar belakang Anda berjalan pada timer dan memerlukan konektivitas Internet, tambahkan kondisi InternetAvailable ke TaskBuilder sebelum mendaftarkan tugas. Ini akan membantu mencegah tugas menggunakan sumber daya sistem dan masa pakai baterai yang tidak perlu dengan hanya menjalankan tugas latar belakang ketika timer telah berlalu dan Internet tersedia.

Dimungkinkan juga untuk menggabungkan beberapa kondisi dengan memanggil AddCondition beberapa kali pada TaskBuilder yang sama. Berhati-hatilah untuk tidak menambahkan kondisi yang bertentangan, seperti UserPresent dan UserNotPresent.

Membuat objek SystemCondition

Topik ini mengasumsikan bahwa Anda memiliki tugas latar belakang yang sudah terkait dengan aplikasi Anda, dan bahwa aplikasi Anda sudah menyertakan kode yang membuat objek BackgroundTaskBuilder bernama taskBuilder. Lihat Membuat dan mendaftarkan tugas latar belakang dalam proses atau Membuat dan mendaftarkan tugas latar belakang di luar proses jika Anda perlu membuat tugas latar belakang terlebih dahulu.

Topik ini berlaku untuk tugas latar belakang yang berjalan di luar proses serta yang berjalan dalam proses yang sama dengan aplikasi latar depan.

Sebelum menambahkan kondisi, buat objek SystemCondition untuk mewakili kondisi yang harus berlaku agar tugas latar belakang berjalan. Dalam konstruktor, tentukan kondisi yang harus dipenuhi dengan nilai enumerasi SystemConditionType .

Kode berikut membuat objek SystemCondition yang menentukan kondisi InternetAvailable :

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

Menambahkan objek SystemCondition ke tugas latar belakang Anda

Untuk menambahkan kondisi, panggil metode AddCondition pada objek BackgroundTaskBuilder , dan berikan objek SystemCondition .

Kode berikut menggunakan taskBuilder untuk menambahkan kondisi InternetAvailable .

taskBuilder.AddCondition(internetCondition);
taskBuilder.AddCondition(internetCondition);
taskBuilder->AddCondition(internetCondition);

Daftarkan tugas latar belakang Anda

Sekarang Anda dapat mendaftarkan tugas latar belakang Anda dengan metode Daftar , dan tugas latar belakang tidak akan dimulai sampai kondisi yang ditentukan terpenuhi.

Kode berikut mendaftarkan tugas dan menyimpan objek BackgroundTaskRegistration yang dihasilkan:

BackgroundTaskRegistration task = taskBuilder.Register();
Windows::ApplicationModel::Background::BackgroundTaskRegistration task{ recurringTaskBuilder.Register() };
BackgroundTaskRegistration ^ task = taskBuilder->Register();

Catatan

Parameter pendaftaran tugas latar belakang divalidasi pada saat pendaftaran. Kesalahan dikembalikan jika salah satu parameter pendaftaran tidak valid. Pastikan aplikasi Anda 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.

Menempatkan beberapa kondisi pada tugas latar belakang Anda

Untuk menambahkan beberapa kondisi, aplikasi Anda melakukan beberapa panggilan ke metode AddCondition . Panggilan ini harus datang sebelum pendaftaran tugas efektif.

Catatan

Berhati-hatilah untuk tidak menambahkan kondisi yang berkonflik ke tugas latar belakang.

Cuplikan berikut menunjukkan beberapa kondisi dalam konteks membuat dan mendaftarkan tugas latar belakang.

// Set up the background task.
TimeTrigger hourlyTrigger = new TimeTrigger(60, false);

var recurringTaskBuilder = new BackgroundTaskBuilder();

recurringTaskBuilder.Name           = "Hourly background task";
recurringTaskBuilder.TaskEntryPoint = "Tasks.ExampleBackgroundTaskClass";
recurringTaskBuilder.SetTrigger(hourlyTrigger);

// Begin adding conditions.
SystemCondition userCondition     = new SystemCondition(SystemConditionType.UserPresent);
SystemCondition internetCondition = new SystemCondition(SystemConditionType.InternetAvailable);

recurringTaskBuilder.AddCondition(userCondition);
recurringTaskBuilder.AddCondition(internetCondition);

// Done adding conditions, now register the background task.

BackgroundTaskRegistration task = recurringTaskBuilder.Register();
// Set up the background task.
Windows::ApplicationModel::Background::TimeTrigger hourlyTrigger{ 60, false };

Windows::ApplicationModel::Background::BackgroundTaskBuilder recurringTaskBuilder;

recurringTaskBuilder.Name(L"Hourly background task");
recurringTaskBuilder.TaskEntryPoint(L"Tasks.ExampleBackgroundTaskClass");
recurringTaskBuilder.SetTrigger(hourlyTrigger);

// Begin adding conditions.
Windows::ApplicationModel::Background::SystemCondition userCondition{
    Windows::ApplicationModel::Background::SystemConditionType::UserPresent };
Windows::ApplicationModel::Background::SystemCondition internetCondition{
    Windows::ApplicationModel::Background::SystemConditionType::InternetAvailable };

recurringTaskBuilder.AddCondition(userCondition);
recurringTaskBuilder.AddCondition(internetCondition);

// Done adding conditions, now register the background task.
Windows::ApplicationModel::Background::BackgroundTaskRegistration task{ recurringTaskBuilder.Register() };
// Set up the background task.
TimeTrigger ^ hourlyTrigger = ref new TimeTrigger(60, false);

auto recurringTaskBuilder = ref new BackgroundTaskBuilder();

recurringTaskBuilder->Name           = "Hourly background task";
recurringTaskBuilder->TaskEntryPoint = "Tasks.ExampleBackgroundTaskClass";
recurringTaskBuilder->SetTrigger(hourlyTrigger);

// Begin adding conditions.
SystemCondition ^ userCondition     = ref new SystemCondition(SystemConditionType::UserPresent);
SystemCondition ^ internetCondition = ref new SystemCondition(SystemConditionType::InternetAvailable);

recurringTaskBuilder->AddCondition(userCondition);
recurringTaskBuilder->AddCondition(internetCondition);

// Done adding conditions, now register the background task.
BackgroundTaskRegistration ^ task = recurringTaskBuilder->Register();

Keterangan

Catatan

Pilih kondisi untuk tugas latar belakang Anda sehingga hanya berjalan saat diperlukan, dan tidak berjalan ketika seharusnya tidak. Lihat SystemConditionType untuk deskripsi kondisi tugas latar belakang yang berbeda.