JobScheduler — API 21 (Android 5.0 Lollipop) da taqdim etilgan Android tizim xizmati bo'lib, ilovalarga belgilangan shartlar asosida fon vazifalarini bajarishni rejalashtirish imkonini beradi. AlarmManager dan farqli o'laroq, JobScheduler aniq ishga tushirish vaqtini talab qilmaydi — tizim ilova talablarini qurilmaning joriy holati bilan birlashtirib, optimal momentni o'zi belgilaydi. Android Developers, 2026 ma'lumotlariga ko'ra, xizmat tarmoq, zaryadlash, xotira holati va qurilmaning harakatsizligi mezonlarini qo'llab-quvvatlaydi.
Asosiy fikrlar
JobScheduler — energiya sarfini kamaytirish uchun bir nechta fon vazifalarini paketlarga birlashtiradigan Android tizim xizmati. Har bir ilova qurilmani uyg'otishi o'rniga, JobScheduler ularni guruhlaydi va qurilma allaqachon faol bo'lgan optimal vaqtda bajaradi. Bu batareyaning ishlash muddatini sezilarli darajada uzaytiradi.
JobScheduler paydo bo'lishidan oldin, dasturchilar fon vazifalari uchun AlarmManager va BroadcastReceiver dan foydalanar edi. Ushbu yondashuvning muammosi — har bir ilova mustaqil ravishda qurilmani uyg'otardi, bu batareyaning tez zaryadsizlanishiga olib kelardi. JobScheduler bu muammoni paketli bajarish oynasini joriy qilish orqali hal qildi, bunda tizim turli ilovalarning barcha rejalashtirilgan vazifalarini bir vaqtning o'zida ishga tushiradi.
Ishlash printsipi ilova JobScheduler ga yuboradigan JobInfo obyektiga asoslanadi. Tizim vazifani saqlaydi va barcha belgilangan shartlar bajarilganda uni ishga tushiradi. WorkManager dan farqli o'laroq, JobScheduler muvaffaqiyatsizlik holatida qayta ishga tushirishni kafolatlamaydi — agar vazifa istisno bilan tugasa, dasturchi uni o'zi qayta rejalashtirishi kerak.
JobScheduler JobService va JobInfo ga asoslangan arxitekturadan foydalanadi. JobInfo vazifa va uning shartlarini tavsiflaydi, JobService bajarish mantiqini o'z ichiga oladi. Ilova vazifani getSystemService(JobScheduler.class) orqali ro'yxatdan o'tkazadi va schedule(jobInfo) ni chaqiradi. Tizim rejalashtirishni o'z zimmasiga oladi.
JobService — Service dan meros oladigan mavhum klass. Ikkita asosiy usulni o'z ichiga oladi: onStartJob (vazifa ishga tushirilganda chaqiriladi) va onStopJob (tizim tomonidan majburiy to'xtatilganda chaqiriladi). JobInfo Builder orqali yaratiladi va vazifaning barcha parametrlarini o'z ichiga oladi: identifikator, shartlar, vaqt cheklovlari.
public class SyncJobService extends JobService {
@Override
public boolean onStartJob(JobParameters params) {
// Asosiy oqimda bajariladi
Thread thread = new Thread(() -> {
performSync();
jobFinished(params, false);
});
thread.start();
return true; // true = ish davom etadi
}
@Override
public boolean onStopJob(JobParameters params) {
return true; // true = vazifani qayta rejalashtir
}
}
JobScheduler bir vaqtning o'zida bir nechta mezonlarni o'rnatishga imkon beradi: tarmoq turi (NETWORK_TYPE_ANY, NOT_ROAMING, UNMETERED), zaryadlash holati (requiresCharging), batareya darajasi (requiresBatteryNotLow), xotira holati (requiresStorageNotLow) va kutish rejimi (requiresDeviceIdle). Vazifa faqat barcha mezonlar bajarilganda ishga tushiriladi.
JobInfo.Builder har bir fon vazifasi uchun moslashuvchan sozlamalarni taqdim etadi. Parametrlarning to'g'ri kombinatsiyasi bajarish muddati va energiya sarfi o'rtasida muvozanatni saqlashga imkon beradi.
| Usul | Tavsif | Misol |
|---|---|---|
| setRequiredNetworkType | Kerakli tarmoq turi | NETWORK_TYPE_UNMETERED |
| setRequiresCharging | Qurilma zaryadlanmoqda | true |
| setRequiresDeviceIdle | Qurilma kutish rejimida | true |
| setOverrideDeadline | Maksimal kutish vaqti (ms) | 300000 |
| setMinimumLatency | Minimal kechikish (ms) | 60000 |
| setPeriodic | Davriy bajarish (ms) | 3600000 |
| setBackoffCriteria | Muvaffaqiyatsizlikda qayta urinish strategiyasi | LINEAR / EXPONENTIAL |
Muhim parametr — setOverrideDeadline. Agar muddat belgilasangiz, tizim barcha shartlar bajarilmagan bo'lsa ham vazifani shu vaqtgacha ishga tushirishni kafolatlaydi. Bu kritik bajarish vaqti bo'lgan vazifalar uchun foydali, masalan, har 6 soatda sinxronizatsiya.
Oddiy stsenariy — Wi-Fi ga ulanish va qurilmani zaryadlash vaqtida ma'lumotlarni sinxronizatsiya qilish. Ilova tegishli mezonlar bilan JobInfo yaratadi va uni JobScheduler ga yuboradi. Tizim qulay shartlar yuzaga kelganda vazifani ishga tushiradi.
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 soat
.build();
JobScheduler scheduler = (JobScheduler)
getSystemService(Context.JOB_SCHEDULER_SERVICE);
scheduler.schedule(jobInfo);
JobService AndroidManifest.xml da BIND_JOB_SERVICE ruxsati bilan ro'yxatdan o'tkazilishi kerak. onStartJob usulida ish tugagandan so'ng jobFinished ni chaqirish muhim — aks holda tizim vazifa cheksiz bajarilayotgan deb hisoblaydi va uni majburiy to'xtatishi mumkin.
<service
android:name=".SyncJobService"
android:permission="android.permission.BIND_JOB_SERVICE" />
JobScheduler bir qator cheklovlarga ega. Birinchidan, faqat Android 5+ da mavjud — eski versiyalar uchun alternativ talab qilinadi. Ikkinchidan, tizim kam ishlatiladigan ilovalarning vazifalarini kechiktirishi mumkin, ayniqsa Android 9+ da App Standby Buckets funksiyasi bilan. Uchinchidan, JobScheduler muvaffaqiyatsizlik holatida kafolatlangan qayta ishga tushirish mexanizmini ta'minlamaydi.
Google to'g'ridan-to'g'ri JobScheduler dan foydalanish o'rniga WorkManager dan foydalanishni tavsiya qiladi. WorkManager Android 5+ da JobScheduler dan ichki foydalanadi, lekin eski versiyalarni qo'llab-quvvatlash, bajarish kafolati, vazifa zanjirlari va LiveData orqali holat monitoringini qo'shadi. Agar ilova faqat Android 8+ ni qo'llab-quvvatlasa va murakkab fon vazifa mantig'ini talab qilmasa, JobScheduler hali ham oqlanishi mumkin.
JobScheduler ni tuzatish uchun ADB orqali dumpsys jobscheduler dan foydalaning: buyruq barcha rejalashtirilgan vazifalarni, ularning holatini, qolgan vaqtni va bajarish tarixini ko'rsatadi. Muayyan ilova uchun: adb shell dumpsys jobscheduler | grep paket_nomi. Bu vazifa ro'yxatdan o'tganmi, qanday shartlar o'rnatilgan va nima uchun ishga tushmayotganini tekshirish imkonini beradi. Shuningdek, vazifa holatini dasturiy tekshirish uchun JobScheduler.getPendingJob() mavjud. Qo'shimcha ravishda, vazifalarni bajarishda energiya sarfini tahlil qilish uchun Android Studio Profiler dan foydalanishingiz mumkin. Android 5+ ilovalari uchun JobScheduler tarmoq va zaryadlash shartlari bilan noaniq fon vazifalari uchun ishonchli vosita bo'lib qoladi.
Odatiy bo'lib, JobService asosiy oqimda bajariladi, shuning uchun barcha bloklovchi operatsiyalar alohida oqim yaratishni yoki AsyncTask dan foydalanishni talab qiladi. WorkManager dan farqli o'laroq, JobScheduler o'rnatilgan oqim hovuzini ta'minlamaydi. Dasturchi oqimlar va sinxronizatsiyani o'zi boshqaradi. Parallel vazifalar uchun ThreadPoolExecutor va asosiy oqim bilan aloqa qilish uchun Handler dan foydalanish tavsiya etiladi. onStopJob da oqishlarning oldini olish uchun ishlayotgan oqimlarni to'g'ri to'xtatish muhimdir.
JobScheduler setPeriodic(long intervalMillis) usuli orqali davriy vazifalarni qo'llab-quvvatlaydi. Minimal interval 15 daqiqa. Biroq, WorkManager dan farqli o'laroq, JobScheduler intervalga aniq rioya qilishni kafolatlamaydi — tizim boshqa vazifalar bilan guruhlash uchun bajarishni o'zgartirishi mumkin. setPeriodic usuli, shuningdek, keyingi API versiyalarida paydo bo'lgan flex-intervalni (moslashuvchan oyna) qo'llab-quvvatlamaydi. Aniq davriy bajarish uchun BroadcastReceiver bilan birgalikda AlarmManager dan foydalaning.
Android 9 dan boshlab, Google ilovalarni foydalanish chastotasiga qarab tasniflovchi App Standby Buckets ni joriy qildi: Active, Working Set, Frequent, Rare. Rare toifasidagi ilovalar JobScheduler vazifalarining bajarilishida 24 soatgacha kechikishlarni ko'radi. Dasturchilar toifaga faqat ilova sifati orqali ta'sir qilishi mumkin — tizim mexanizmlari foydalanuvchi muntazam aloqada bo'lgan ilovalarning ustuvorligini avtomatik ravishda oshiradi. JobScheduler bu tasnifni hisobga oladi va Rare dan ilova vazifasi faqat xizmat oynasida bajariladi. Active toifasidagi ilovalar uchun (eng ko'p ishlatiladigan) kechikishlar minimal va vazifalar shartlar bajarilganda deyarli darhol bajariladi.
Aniq boshlanish vaqti bo'lgan davriy vazifalar uchun JobScheduler mos emas — AlarmManager dan foydalaning. Qisqa bir martalik vazifalar uchun — bildirishnoma bilan Foreground Service. JobScheduler vaqt aniqligi emas, balki energiya samaradorligi muhim bo'lgan vazifalar uchun optimaldir: sinxronizatsiya, yangilanishlarni yuklab olish, ma'lumotlarni paketli qayta ishlash. Fon ish vositasini to'g'ri tanlash to'g'ridan-to'g'ri foydalanuvchi tajribasiga va qurilmaning batareya muddatiga ta'sir qiladi. Yakuniy qaror — shartlar bilan paketli qayta ishlash uchun JobScheduler, jadval bo'yicha vazifalar uchun AlarmManager, universal rejalashtiruvchi sifatida WorkManager.
Tez-tez so'raladigan savollar
Ha, JobScheduler turli ilovalarning vazifalarini paketlarga guruhlaydi va ularni birgalikda bajaradi. Bu AlarmManager dan asosiy ustunlik: har bir ilova qurilmani alohida uyg'otish o'rniga, tizim protsessorni bir marta uyg'otadi va barcha rejalashtirilgan vazifalarni qayta ishlaydi.
Agar jobFinished chaqiruvi maqbul vaqt ichida amalga oshirilmasa, tizim majburiy ravishda onStopJob ni chaqirishi va vazifani tugatishi mumkin. Bir vazifa uchun bir necha daqiqa ichida bajarish va tugatgandan so'ng har doim jobFinished ni chaqirish tavsiya etiladi.
Doze Mode da JobScheduler barcha vazifalarni davriy ravishda keladigan keyingi xizmat oynasiga (maintenance window) qoldiradi. setOverrideDeadline dan foydalanish vazifaning ushbu oynalarni hisobga olgan holda bajarilishini kafolatlaydi, lekin aniq vaqtda emas.
WorkManager — Android 5+ da ichki JobScheduler dan foydalanadigan kutubxona. WorkManager bajarish kafolati, eski versiyalarni qo'llab-quvvatlash (API 14+), Worker zanjirlari, LiveData/Flow orqali holat monitoringi va muvaffaqiyatsizliklarda avtomatik takrorlashni qo'shadi.
Bekor qilish uchun muayyan vazifa uchun scheduler.cancel(JOB_ID) yoki ilovaning barcha vazifalari uchun scheduler.cancelAll() dan foydalaning. Job ID JobInfo yaratishda ko'rsatilganiga mos kelishiga ishonch hosil qiling, aks holda vazifa bekor qilinmaydi.
Dasturchilar JobScheduler past darajadagi tizim API si ekanligini tushunishlari muhimdir, bu qurilmaning fon vazifalari ustidan to'liq nazoratni xohlaydigan tajribali jamoalar uchun mo'ljallangan. Ko'pgina ilovalar uchun WorkManager Android uchun sodda, xavfsiz va zamonaviy API bilan bir xil funksionallikni ta'minlaydi.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.