JobScheduler: mahiyyəti, API və tapşırıqların planlaşdırılması

Müəllif: IT Sectr Dərc olunub: 2026-03-27 Oxuma vaxtı: 8 dəq

JobScheduler — API 21 (Android 5.0 Lollipop) ilə təqdim edilmiş, proqramlara müəyyən şərtlər əsasında fon tapşırıqlarının yerinə yetirilməsini planlaşdırmağa imkan verən Android sistem xidmətidir. AlarmManager-dən fərqli olaraq, JobScheduler dəqiq işə salma vaxtı tələb etmir — sistem proqramın tələblərini cihazın cari vəziyyəti ilə birləşdirərək optimal anı özü müəyyən edir. Android Developers, 2026-ya görə, xidmət şəbəkə, yükləmə, yaddaş vəziyyəti və cihazın boş qalması meyarlarını dəstəkləyir.

Əsas məqamlar

  • JobScheduler — Android 5+ üçün sistem API-si, işə salma şərtləri ilə fon tapşırıqlarının toplu emalı üçün.
  • JobService — icra şərtləri yerinə yetirildikdə sistem tərəfindən çağırılan əsas emalçı sinif.
  • JobInfo — tapşırığın parametrlərini təsvir edən obyekt: şəbəkə növü, batareya doldurma, deadline və gecikmə.
  • Meyarlar Wi-Fi-a qoşulma, doldurma, boş yerin olması və cihazın hərəkətsizliyini əhatə edir.
  • WorkManager Android 5+-də JobScheduler-dən daxildən istifadə edir, daha yüksək səviyyəli API təklif edir.

JobScheduler nədir?

JobScheduler — enerji sərfiyyatını azaltmaq üçün bir neçə fon tapşırığını paketlərdə birləşdirən Android sistem xidmətidir. Hər bir proqramın cihazı oyatması əvəzinə, JobScheduler onları qruplaşdırır və cihaz artıq aktiv olduqda optimal anda yerinə yetirir. Bu, batareya işləmə müddətini əhəmiyyətli dərəcədə uzadır.

JobScheduler meydana çıxmazdan əvvəl, tərtibatçılar fon tapşırıqları üçün AlarmManager və BroadcastReceiver-dən istifadə edirdilər. Bu yanaşmanın problemi — hər bir proqram müstəqil olaraq cihazı oyadırdı, bu da batareyanın sürətlə boşalmasına səbəb olurdu. JobScheduler bu problemi toplu icra pəncərəsi tətbiq edərək həll etdi, bu zaman sistem müxtəlif proqramların bütün planlaşdırılmış tapşırıqlarını eyni anda işə salır.

İş prinsipi proqramın JobScheduler-ə ötürdüyü JobInfo obyektinə əsaslanır. Sistem tapşırığı saxlayır və bütün göstərilən şərtlər yerinə yetirildikdə onu işə salır. WorkManager-dən fərqli olaraq, JobScheduler uğursuzluq halda təkrar işə salınmaya zəmanət vermir — əgər tapşırıq istisna ilə başa çatarsa, tərtibatçı onu özü yenidən planlaşdırmalıdır.

JobScheduler necə işləyir?

JobScheduler JobService və JobInfo əsasında arxitekturadan istifadə edir. JobInfo tapşırığı və onun şərtlərini təsvir edir, JobService icra məntiqini ehtiva edir. Proqram tapşırığı getSystemService(JobScheduler.class) vasitəsilə qeydiyyatdan keçirir və schedule(jobInfo) çağırır. Sistem planlaşdırmanı öz üzərinə götürür.

JobService və JobInfo

JobService — Service-dən miras alan abstrakt sinif. İki əsas metodu ehtiva edir: onStartJob (tapşırıq işə salındıqda çağırılır) və onStopJob (sistem tərəfindən məcburi dayandırıldıqda çağırılır). JobInfo Builder vasitəsilə yaradılır və tapşırığın bütün parametrlərini ehtiva edir: identifikator, şərtlər, vaxt məhdudiyyətləri.

java
public class SyncJobService extends JobService {
    @Override
    public boolean onStartJob(JobParameters params) {
        // Əsas iplikdə icra olunur
        Thread thread = new Thread(() -> {
            performSync();
            jobFinished(params, false);
        });
        thread.start();
        return true; // true = iş davam edir
    }

    @Override
    public boolean onStopJob(JobParameters params) {
        return true; // true = tapşırığı yenidən planla
    }
}

Tapşırığın işə salma meyarları

JobScheduler eyni anda bir neçə meyar təyin etməyə imkan verir: şəbəkə növü (NETWORK_TYPE_ANY, NOT_ROAMING, UNMETERED), doldurma vəziyyəti (requiresCharging), doldurma səviyyəsi (requiresBatteryNotLow), yaddaş vəziyyəti (requiresStorageNotLow) və gözləmə rejimi (requiresDeviceIdle). Tapşırıq yalnız bütün meyarlar yerinə yetirildikdə işə salınır.

JobInfo parametrləri

JobInfo.Builder hər bir fon tapşırığı üçün çevik parametrlər təmin edir. Parametrlərin düzgün kombinasiyası icranın vaxtında yerinə yetirilməsi ilə enerji sərfiyyatı arasında balans yaratmağa imkan verir.

MetodTəsvirNümunə
setRequiredNetworkTypeTələb olunan şəbəkə növüNETWORK_TYPE_UNMETERED
setRequiresChargingCihaz doldurulurtrue
setRequiresDeviceIdleCihaz gözləmə rejimindətrue
setOverrideDeadlineMaksimum gözləmə vaxtı (ms)300000
setMinimumLatencyMinimum gecikmə (ms)60000
setPeriodicDövri icra (ms)3600000
setBackoffCriteriaUğursuzluqda təkrar strategiyasıLINEAR / EXPONENTIAL

Vacib parametr — setOverrideDeadline. Əgər deadline təyin etsəniz, sistem hətta bütün şərtlər yerinə yetirilməsə belə, tapşırığı həmin vaxta qədər işə salmağa zəmanət verir. Bu, kritik icra vaxtı olan tapşırıqlar üçün faydalıdır, məsələn, hər 6 saatda sinxronizasiya.

JobScheduler istifadə nümunəsi

Çox sayda şərtlə tapşırığın planlaşdırılması

Tipik ssenari — Wi-Fi-a qoşulduqda və cihaz doldurulduqda məlumat sinxronizasiyası. Proqram müvafiq meyarlarla JobInfo yaradır və onu JobScheduler-ə ötürür. Sistem əlverişli şərtlər yarandıqda tapşırığı işə salır.

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 saat
    .build();

JobScheduler scheduler = (JobScheduler)
    getSystemService(Context.JOB_SCHEDULER_SERVICE);
scheduler.schedule(jobInfo);

JobService-in manifestdə qeydiyyatı

JobService AndroidManifest.xml-də BIND_JOB_SERVICE icazəsi ilə qeydiyyatdan keçirilməlidir. onStartJob metodunda iş bitdikdən sonra jobFinished çağırmaq vacibdir — əks halda sistem tapşırığın sonsuz icra olunduğunu düşünəcək və onu məcburi dayandıra bilər.

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

Məhdudiyyətlər və alternativlər

JobScheduler-in bir sıra məhdudiyyətləri var. Birincisi, yalnız Android 5+-də mövcuddur — köhnə versiyalar üçün alternativ tələb olunur. İkincisi, sistem xüsusilə Android 9+-da App Standby Buckets funksiyası ilə nadir istifadə olunan proqramların tapşırıqlarını gecikdirə bilər. Üçüncüsü, JobScheduler uğursuzluq halda zəmanətli təkrar işə salma mexanizmi təmin etmir.

Google birbaşa JobScheduler istifadə etmək əvəzinə WorkManager-dən istifadə etməyi tövsiyə edir. WorkManager Android 5+-də daxildən JobScheduler-dən istifadə edir, lakin köhnə versiyaların dəstəyi, icra zəmanəti, tapşırıq zəncirləri və LiveData vasitəsilə vəziyyət monitorinqi əlavə edir. Əgər proqram yalnız Android 8+-i dəstəkləyirsə və mürəkkəb fon tapşırıq məntiqi tələb etmirsə, JobScheduler hələ də əsaslandırıla bilər.

JobScheduler monitorinqi və sazlanması

JobScheduler sazlanması üçün ADB vasitəsilə dumpsys jobscheduler istifadə edin: əmr bütün planlaşdırılmış tapşırıqları, onların statusunu, qalan vaxtı və icra tarixçəsini göstərir. Konkret proqram üçün: adb shell dumpsys jobscheduler | grep paket_adı. Bu, tapşırığın qeydiyyatdan keçib-keçmədiyini, hansı şərtlərin təyin edildiyini və niyə işə salınmadığını yoxlamağa imkan verir. Həmçinin tapşırıq statusunu proqramlı şəkildə yoxlamaq üçün JobScheduler.getPendingJob() mövcuddur. Əlavə olaraq, tapşırıqların icrası zamanı enerji sərfiyyatını təhlil etmək üçün Android Studio Profiler istifadə edilə bilər. Android 5+ üçün proqramlarda JobScheduler şəbəkə və doldurma şərtləri ilə qeyri-dəqiq fon tapşırıqları üçün etibarlı alət olaraq qalır.

JobScheduler çoxiplik ssenarilərində

Susmaya görə JobService əsas iplikdə icra olunur, buna görə də bütün bloklayan əməliyyatlar ayrıca iplik yaradılmasını və ya AsyncTask istifadəsini tələb edir. WorkManager-dən fərqli olaraq, JobScheduler daxili iplik hovuzu təmin etmir. Tərtibatçı iplikləri və sinxronizasiyanı özü idarə edir. Paralel tapşırıqlar üçün ThreadPoolExecutor və əsas ipliklə əlaqə üçün Handler istifadə etmək tövsiyə olunur. onStopJob-da sızıntıların qarşısını almaq üçün işləyən iplikləri düzgün dayandırmaq vacibdir.

JobScheduler vasitəsilə dövri tapşırıqlar

JobScheduler setPeriodic(long intervalMillis) metodu vasitəsilə dövri tapşırıqları dəstəkləyir. Minimum interval 15 dəqiqədir. Lakin WorkManager-dən fərqli olaraq, JobScheduler intervalın dəqiq saxlanmasına zəmanət vermir — sistem digər tapşırıqlarla qruplaşdırmaq üçün icranı dəyişə bilər. setPeriodic metodu həmçinin daha sonrakı API versiyalarında meydana çıxmış flex-intervalı (çevik pəncərə) dəstəkləmir. Dəqiq dövri icra üçün BroadcastReceiver ilə birlikdə AlarmManager istifadə edin.

App Standby Buckets və JobScheduler-ə təsiri

Android 9-dan başlayaraq, Google istifadə tezliyinə görə proqramları təsnif edən App Standby Buckets-i təqdim etdi: Active, Working Set, Frequent, Rare. Rare kateqoriyasındakı proqramlar JobScheduler tapşırıqlarının icrasında 24 saata qədər gecikmələr görür. Tərtibatçılar kateqoriyaya yalnız proqramın keyfiyyəti vasitəsilə təsir edə bilər — sistem mexanizmləri istifadəçinin müntəzəm qarşılıqlı əlaqədə olduğu proqramların prioritetini avtomatik artırır. JobScheduler bu təsnifatı nəzərə alır və Rare proqramının tapşırığı yalnız xidmət pəncərəsində icra olunacaq. Active kateqoriyasındakı proqramlar üçün (ən çox istifadə olunan) gecikmələr minimaldır və tapşırıqlar şərtlər yerinə yetirildikdə praktiki olaraq dərhal icra olunur.

Dəqiq başlama vaxtı olan dövri tapşırıqlar üçün JobScheduler uyğun deyil — AlarmManager istifadə edin. Qısa birdəfəlik tapşırıqlar üçün — bildirişlə Foreground Service. JobScheduler vaxtın dəqiqliyi deyil, enerji səmərəliliyinin vacib olduğu tapşırıqlar üçün optimaldır: sinxronizasiya, yeniləmələrin yüklənməsi, məlumatların toplu emalı. Fon iş alətinin düzgün seçimi istifadəçi təcrübəsinə və cihazın muxtar iş vaxtına birbaşa təsir edir. Yekun qərar — şərtlərlə toplu emal üçün JobScheduler, cədvəl üzrə tapşırıqlar üçün AlarmManager, universal planlayıcı kimi WorkManager.

Tez-tez verilən suallar

JobScheduler həqiqətən müxtəlif proqramların tapşırıqlarını birləşdirir?

Bəli, JobScheduler müxtəlif proqramların tapşırıqlarını paketlərdə qruplaşdırır və onları birlikdə yerinə yetirir. Bu, AlarmManager-dən əsas üstünlükdür: hər proqramın cihazı ayrıca oyatması əvəzinə, sistem prosessoru bir dəfə oyadır və bütün planlaşdırılmış tapşırıqları emal edir.

JobService-də tapşırıq çox uzun icra olunarsa nə baş verir?

Əgər jobFinished çağırışı ağlabatan müddət ərzində edilməzsə, sistem məcburi olaraq onStopJob çağıra və tapşırığı dayandıra bilər. Bir tapşırıq üçün bir neçə dəqiqə ərzində yerinə yetirmək və bitdikdən sonra həmişə jobFinished çağırmaq tövsiyə olunur.

JobScheduler Doze Mode-da necə davranır?

Doze Mode-da JobScheduler bütün tapşırıqları dövri olaraq gələn növbəti xidmət pəncərəsinə (maintenance window) qədər təxirə salır. setOverrideDeadline istifadəsi tapşırığın bu pəncərələr nəzərə alınmaqla yerinə yetiriləcəyinə zəmanət verir, lakin mütləq dəqiq vaxtda deyil.

JobScheduler WorkManager-dən nə ilə fərqlənir?

WorkManager — Android 5+-də daxildən JobScheduler istifadə edən kitabxanadır. WorkManager icra zəmanəti, köhnə versiyaların dəstəyi (API 14+), Worker zəncirləri, LiveData/Flow vasitəsilə vəziyyət monitorinqi və uğursuzluqlarda avtomatik təkrarlama əlavə edir.

JobScheduler-də planlaşdırılmış tapşırığı necə ləğv etmək olar?

Ləğv etmək üçün konkret tapşırıq üçün scheduler.cancel(JOB_ID) və ya proqramın bütün tapşırıqları üçün scheduler.cancelAll() istifadə edin. Job ID-nin JobInfo yaradılarkən göstərilənlə uyğun olduğuna əmin olun, əks halda tapşırıq ləğv edilməyəcək.

Tərtibatçılar başa düşməlidirlər ki, JobScheduler — cihazın fon tapşırıqları üzərində tam nəzarət istəyən təcrübəli komandalar üçün nəzərdə tutulmuş aşağı səviyyəli sistem API-sidir. Əksər proqramlar üçün WorkManager Android üçün daha sadə, təhlükəsiz və müasir API ilə eyni funksionallığı təmin edir.

Xülasə

  • JobScheduler — müəyyən şərtlərlə fon tapşırıqlarının toplu icrası üçün Android 5+ sistem xidmətidir.
  • Arxitektura AndroidManifest vasitəsilə qeydiyyatdan keçirilmiş JobService (məntiq) və JobInfo (parametrlər) ətrafında qurulur.
  • İşə salma meyarları şəbəkə, doldurma, yaddaş vəziyyəti və cihazın hərəkətsizliyini əhatə edir.
  • setOverrideDeadline — tapşırığın müəyyən vaxta qədər icrasına zəmanət verməyin yeganə yolu.
  • Toplu icra müxtəlif proqramların tapşırıqlarını birləşdirir, cihazın ümumi enerji sərfiyyatını azaldır.
  • WorkManager — icra zəmanəti və köhnə Android versiyalarının dəstəyi ilə üstünlük verilən alternativ.
  • İstifadə etməyin JobScheduler-i dəqiq vaxt tələb edən tapşırıqlar üçün — bunun üçün AlarmManager mövcuddur.

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun