JobScheduler: mohiyati, API va vazifalarni rejalashtirish

Muallif: IT Sectr Nashr etilgan: 2026-03-27 O'qish vaqti: 8 daq

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 — Android 5+ uchun tizim API si, ishga tushirish shartlari bilan fon vazifalarini paketli qayta ishlash uchun.
  • JobService — bajarish shartlari bajarilganda tizim tomonidan chaqiriladigan asosiy ishlov berish klassi.
  • JobInfo — vazifa parametrlarini tavsiflovchi obyekt: tarmoq turi, batareya zaryadi, muddat va kechikish.
  • Mezonlar Wi-Fi ga ulanish, zaryadlash, bo'sh joy mavjudligi va qurilmaning harakatsizligini o'z ichiga oladi.
  • WorkManager Android 5+ da JobScheduler dan ichki foydalanadi, yuqori darajadagi API taklif qiladi.

JobScheduler nima?

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 qanday ishlaydi?

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 va JobInfo

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.

java
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
    }
}

Vazifani ishga tushirish mezonlari

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 parametrlari

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.

UsulTavsifMisol
setRequiredNetworkTypeKerakli tarmoq turiNETWORK_TYPE_UNMETERED
setRequiresChargingQurilma zaryadlanmoqdatrue
setRequiresDeviceIdleQurilma kutish rejimidatrue
setOverrideDeadlineMaksimal kutish vaqti (ms)300000
setMinimumLatencyMinimal kechikish (ms)60000
setPeriodicDavriy bajarish (ms)3600000
setBackoffCriteriaMuvaffaqiyatsizlikda qayta urinish strategiyasiLINEAR / 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.

JobScheduler dan foydalanish misoli

Bir nechta shartlar bilan vazifani rejalashtirish

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.

java
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 ni manifestda ro'yxatdan o'tkazish

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.

xml
<service
    android:name=".SyncJobService"
    android:permission="android.permission.BIND_JOB_SERVICE" />

Cheklovlar va alternativlar

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 monitoringi va tuzatish

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.

JobScheduler ko'p oqimli stsenariylarda

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 orqali davriy vazifalar

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.

App Standby Buckets va JobScheduler ga ta'siri

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

JobScheduler haqiqatan ham turli ilovalarning vazifalarini birlashtiradimi?

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.

JobService da vazifa juda uzoq bajarilsa nima bo'ladi?

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.

JobScheduler Doze Mode da qanday ishlaydi?

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.

JobScheduler WorkManager dan qanday farq qiladi?

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.

JobScheduler da rejalashtirilgan vazifani qanday bekor qilish mumkin?

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

  • JobScheduler — belgilangan shartlar bilan fon vazifalarini paketli bajarish uchun Android 5+ tizim xizmati.
  • Arxitektura AndroidManifest orqali ro'yxatdan o'tgan JobService (mantiq) va JobInfo (parametrlar) atrofida qurilgan.
  • Ishga tushirish mezonlari tarmoq, zaryadlash, xotira holati va qurilmaning harakatsizligini o'z ichiga oladi.
  • setOverrideDeadline — vazifani ma'lum vaqtgacha bajarishni kafolatlashning yagona usuli.
  • Paketli bajarish turli ilovalarning vazifalarini birlashtiradi, qurilmaning umumiy energiya sarfini kamaytiradi.
  • WorkManager — bajarish kafolati va eski Android versiyalarini qo'llab-quvvatlash bilan afzal ko'rilgan alternativ.
  • Foydalanmang JobScheduler ni aniq vaqt talab qiladigan vazifalar uchun — buning uchun AlarmManager mavjud.

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.

Loyihani muhokama qilish

Shuningdek o'qing