JobScheduler adalah layanan sistem Android yang diperkenalkan di API 21 (Android 5.0 Lollipop) yang memungkinkan aplikasi menjadwalkan eksekusi tugas latar belakang berdasarkan kondisi tertentu. Tidak seperti AlarmManager, JobScheduler tidak memerlukan waktu mulai yang tepat — sistem sendiri menentukan momen optimal dengan menggabungkan persyaratan aplikasi dengan status perangkat saat ini. Menurut Android Developers, 2026, layanan ini mendukung kriteria jaringan, pengisian daya, status penyimpanan, dan idle perangkat.
Poin Utama
JobScheduler adalah layanan sistem Android yang menggabungkan beberapa tugas latar belakang ke dalam batch untuk mengurangi konsumsi daya. Alih-alih setiap aplikasi membangunkan perangkat untuk menjalankan tugasnya, JobScheduler mengelompokkannya dan menjalankannya pada momen optimal saat perangkat sudah aktif. Ini secara signifikan memperpanjang masa pakai baterai.
Sebelum munculnya JobScheduler, pengembang menggunakan AlarmManager dan BroadcastReceiver untuk tugas latar belakang. Masalah dari pendekatan ini — setiap aplikasi secara independen membangunkan perangkat, yang menyebabkan pengosongan baterai dengan cepat. JobScheduler memecahkan masalah ini dengan memperkenalkan jendela eksekusi batch, di mana sistem menjalankan semua tugas yang dijadwalkan dari berbagai aplikasi secara bersamaan.
Prinsip kerja didasarkan pada objek JobInfo yang diberikan aplikasi ke JobScheduler. Sistem menyimpan tugas dan menjalankannya saat semua kondisi yang ditentukan terpenuhi. Tidak seperti WorkManager, JobScheduler tidak menjamin mulai ulang jika terjadi kegagalan — jika tugas gagal dengan pengecualian, pengembang harus menjadwalkannya ulang sendiri.
JobScheduler menggunakan arsitektur berbasis JobService dan JobInfo. JobInfo mendeskripsikan tugas dan kondisinya, JobService berisi logika eksekusi. Aplikasi mendaftarkan tugas melalui getSystemService(JobScheduler.class) dan memanggil schedule(jobInfo). Sistem mengambil alih penjadwalan.
JobService adalah kelas abstrak yang mewarisi Service. Ini memiliki dua metode kunci: onStartJob (dipanggil saat tugas dimulai) dan onStopJob (dipanggil saat penghentian paksa oleh sistem). JobInfo dibuat melalui Builder dan berisi semua parameter tugas: pengidentifikasi, kondisi, batasan waktu.
public class SyncJobService extends JobService {
@Override
public boolean onStartJob(JobParameters params) {
// Dijalankan di thread utama
Thread thread = new Thread(() -> {
performSync();
jobFinished(params, false);
});
thread.start();
return true; // true = pekerjaan berlanjut
}
@Override
public boolean onStopJob(JobParameters params) {
return true; // true = jadwalkan ulang tugas
}
}
JobScheduler memungkinkan pengaturan beberapa kriteria secara bersamaan: jenis jaringan (NETWORK_TYPE_ANY, NOT_ROAMING, UNMETERED), status pengisian daya (requiresCharging), tingkat baterai (requiresBatteryNotLow), status penyimpanan (requiresStorageNotLow), dan mode siaga (requiresDeviceIdle). Tugas hanya dimulai saat semua kriteria terpenuhi.
JobInfo.Builder menyediakan pengaturan fleksibel untuk setiap tugas latar belakang. Kombinasi parameter yang tepat memungkinkan keseimbangan antara ketepatan waktu eksekusi dan konsumsi daya.
| Metode | Deskripsi | Contoh |
|---|---|---|
| setRequiredNetworkType | Jenis jaringan yang diperlukan | NETWORK_TYPE_UNMETERED |
| setRequiresCharging | Perangkat sedang diisi daya | true |
| setRequiresDeviceIdle | Perangkat dalam mode siaga | true |
| setOverrideDeadline | Waktu tunggu maksimum (ms) | 300000 |
| setMinimumLatency | Penundaan minimum (ms) | 60000 |
| setPeriodic | Eksekusi periodik (ms) | 3600000 |
| setBackoffCriteria | Strategi pengulangan saat gagal | LINEAR / EXPONENTIAL |
Parameter penting — setOverrideDeadline. Jika Anda menetapkan batas waktu, sistem akan menjamin tugas dijalankan pada waktu tersebut, bahkan jika tidak semua kondisi terpenuhi. Ini berguna untuk tugas dengan waktu eksekusi kritis, misalnya sinkronisasi setiap 6 jam.
Skenario tipikal — sinkronisasi data saat terhubung ke Wi-Fi dan perangkat diisi daya. Aplikasi membuat JobInfo dengan kriteria yang sesuai dan memberikannya ke JobScheduler. Sistem menjalankan tugas saat kondisi yang menguntungkan terpenuhi.
ComponentName serviceName = new ComponentName(this, SyncJobService.class);
JobInfo jobInfo = new JobInfo.Builder(JOB_ID_SYNC, serviceName)
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
.setRequiresCharging(true)
.setRequiresBatteryNotLow(true)
.setOverrideDeadline(6 * 60 * 60 * 1000) // 6 jam
.build();
JobScheduler scheduler = (JobScheduler)
getSystemService(Context.JOB_SCHEDULER_SERVICE);
scheduler.schedule(jobInfo);
JobService harus didaftarkan di AndroidManifest.xml dengan izin BIND_JOB_SERVICE. Dalam metode onStartJob, penting untuk memanggil jobFinished setelah menyelesaikan pekerjaan — jika tidak, sistem akan menganggap tugas berjalan tanpa batas dan dapat menghentikannya secara paksa.
<service
android:name=".SyncJobService"
android:permission="android.permission.BIND_JOB_SERVICE" />
JobScheduler memiliki sejumlah keterbatasan. Pertama, hanya tersedia di Android 5+ — untuk versi yang lebih lama diperlukan alternatif. Kedua, sistem dapat menunda tugas aplikasi yang jarang digunakan, terutama di Android 9+ dengan fitur App Standby Buckets. Ketiga, JobScheduler tidak menyediakan mekanisme mulai ulang yang dijamin jika terjadi kegagalan.
Google merekomendasikan penggunaan WorkManager daripada menggunakan JobScheduler secara langsung. WorkManager menggunakan JobScheduler di dalamnya pada Android 5+, tetapi menambahkan dukungan untuk versi lama, jaminan eksekusi, rantai tugas, dan pemantauan status melalui LiveData. Jika aplikasi hanya mendukung Android 8+ dan tidak memerlukan logika tugas latar belakang yang kompleks, JobScheduler masih dapat dibenarkan.
Untuk debugging JobScheduler, gunakan dumpsys jobscheduler melalui ADB: perintah menunjukkan semua tugas yang dijadwalkan, statusnya, waktu tersisa, dan riwayat eksekusi. Untuk aplikasi tertentu: adb shell dumpsys jobscheduler | grep nama_paket. Ini memungkinkan pemeriksaan apakah tugas terdaftar, kondisi apa yang ditetapkan, dan mengapa tidak berjalan. Juga tersedia JobScheduler.getPendingJob() untuk pemeriksaan status tugas secara terprogram. Selain itu, Anda dapat menggunakan Android Studio Profiler untuk menganalisis konsumsi daya saat eksekusi tugas. Untuk aplikasi di Android 5+, JobScheduler tetap menjadi alat yang andal untuk tugas latar belakang yang tidak presisi dengan kondisi jaringan dan pengisian daya.
Secara default, JobService berjalan di thread utama, oleh karena itu semua operasi pemblokiran memerlukan pembuatan thread terpisah atau penggunaan AsyncTask. Tidak seperti WorkManager, JobScheduler tidak menyediakan kumpulan thread bawaan. Pengembang mengelola thread dan sinkronisasi sendiri. Disarankan menggunakan ThreadPoolExecutor untuk tugas paralel dan Handler untuk komunikasi dengan thread utama. Di onStopJob, penting untuk menghentikan thread yang berjalan dengan benar untuk menghindari kebocoran.
JobScheduler mendukung tugas periodik melalui metode setPeriodic(long intervalMillis). Interval minimum adalah 15 menit. Namun, tidak seperti WorkManager, JobScheduler tidak menjamin kepatuhan yang tepat terhadap interval — sistem dapat menggeser eksekusi untuk pengelompokan dengan tugas lain. Metode setPeriodic juga tidak mendukung flex-interval (jendela fleksibel) yang muncul di versi API yang lebih baru. Untuk eksekusi periodik yang tepat, gunakan AlarmManager dalam kombinasi dengan BroadcastReceiver.
Mulai Android 9, Google memperkenalkan App Standby Buckets, yang mengklasifikasikan aplikasi berdasarkan frekuensi penggunaan: Active, Working Set, Frequent, Rare. Aplikasi dalam kategori Rare mengalami penundaan eksekusi tugas JobScheduler hingga 24 jam. Pengembang hanya dapat memengaruhi kategori melalui kualitas aplikasi — mekanisme sistem secara otomatis meningkatkan prioritas aplikasi yang sering berinteraksi dengan pengguna. JobScheduler mempertimbangkan klasifikasi ini, dan tugas aplikasi dari Rare hanya akan dijalankan di jendela pemeliharaan. Untuk aplikasi dari kategori Active (paling sering digunakan) penundaannya minimal dan tugas dijalankan segera setelah kondisi terpenuhi.
Untuk tugas periodik dengan waktu mulai yang tepat, JobScheduler tidak cocok — gunakan AlarmManager. Untuk tugas satu kali pendek — Foreground Service dengan notifikasi. JobScheduler optimal untuk tugas di mana efisiensi energi penting, bukan ketepatan waktu: sinkronisasi, pengunduhan pembaruan, pemrosesan batch data. Pemilihan alat kerja latar belakang yang tepat secara langsung memengaruhi pengalaman pengguna dan masa pakai baterai perangkat. Keputusan akhir — JobScheduler untuk pemrosesan batch dengan kondisi, AlarmManager untuk tugas terjadwal, WorkManager sebagai penjadwal universal.
Pertanyaan yang Sering Diajukan
Ya, JobScheduler mengelompokkan tugas dari berbagai aplikasi ke dalam batch dan menjalankannya bersama. Ini adalah keunggulan utama dibandingkan AlarmManager: alih-alih setiap aplikasi membangunkan perangkat secara terpisah, sistem membangunkan prosesor sekali dan memproses semua tugas yang dijadwalkan.
Jika panggilan jobFinished tidak dilakukan dalam waktu yang wajar, sistem dapat secara paksa memanggil onStopJob dan mengakhiri tugas. Disarankan untuk menyelesaikan dalam beberapa menit untuk satu tugas dan selalu memanggil jobFinished setelah selesai.
Di Doze Mode, JobScheduler menunda semua tugas hingga jendela pemeliharaan berikutnya (maintenance window) yang muncul secara periodik. Penggunaan setOverrideDeadline menjamin tugas akan dijalankan dengan mempertimbangkan jendela ini, tetapi tidak harus pada waktu yang tepat.
WorkManager adalah pustaka yang di dalamnya menggunakan JobScheduler pada Android 5+. WorkManager menambahkan jaminan eksekusi, dukungan untuk versi lama (API 14+), rantai Worker, pemantauan status melalui LiveData/Flow, dan pengulangan otomatis saat kegagalan.
Untuk pembatalan gunakan scheduler.cancel(JOB_ID) untuk tugas tertentu atau scheduler.cancelAll() untuk semua tugas aplikasi. Pastikan ID tugas sesuai dengan yang ditentukan saat membuat JobInfo, jika tidak tugas tidak akan dibatalkan.
Penting bagi pengembang untuk memahami bahwa JobScheduler adalah API sistem tingkat rendah yang ditujukan untuk tim berpengalaman yang menginginkan kendali penuh atas tugas latar belakang perangkat. Untuk sebagian besar aplikasi, WorkManager menyediakan fungsionalitas yang sama dengan API yang lebih sederhana, aman, dan modern untuk Android.
Ringkasan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga