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 — 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 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 — 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.
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
}
}
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.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.
| Metod | Təsvir | Nümunə |
|---|---|---|
| setRequiredNetworkType | Tələb olunan şəbəkə növü | NETWORK_TYPE_UNMETERED |
| setRequiresCharging | Cihaz doldurulur | true |
| setRequiresDeviceIdle | Cihaz gözləmə rejimində | true |
| setOverrideDeadline | Maksimum gözləmə vaxtı (ms) | 300000 |
| setMinimumLatency | Minimum gecikmə (ms) | 60000 |
| setPeriodic | Dövri icra (ms) | 3600000 |
| setBackoffCriteria | Uğ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.
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.
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 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.
<service
android:name=".SyncJobService"
android:permission="android.permission.BIND_JOB_SERVICE" />
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 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.
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 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.
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
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.
Ə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.
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.
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.
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ə
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.
Həm də oxuyun