JobScheduler egy Android rendszerszolgáltatás, amelyet az API 21-ben (Android 5.0 Lollipop) vezettek be, és lehetővé teszi az alkalmazások számára, hogy háttérfeladatok végrehajtását ütemezzék meghatározott feltételek alapján. Az AlarmManager-rel ellentétben a JobScheduler nem igényel pontos kezdési időt — a rendszer maga határozza meg az optimális pillanatot, kombinálva az alkalmazás követelményeit az eszköz aktuális állapotával. A Android Developers, 2026 szerint a szolgáltatás támogatja a hálózatra, töltésre, tároló állapotára és az eszköz tétlenségére vonatkozó kritériumokat.
Főbb pontok
JobScheduler egy Android rendszerszolgáltatás, amely több háttérfeladatot kötegekbe egyesít az energiafogyasztás csökkentése érdekében. Ahelyett, hogy minden alkalmazás külön-külön ébresztené az eszközt a feladata végrehajtásához, a JobScheduler csoportosítja őket, és az optimális pillanatban hajtja végre, amikor az eszköz már aktív. Ez jelentősen meghosszabbítja az akkumulátor élettartamát.
A JobScheduler megjelenése előtt a fejlesztők AlarmManager-t és BroadcastReceiver-t használtak háttérfeladatokhoz. Ennek a megközelítésnek a problémája — minden alkalmazás függetlenül ébresztette az eszközt, ami az akkumulátor gyors lemerüléséhez vezetett. A JobScheduler megoldotta ezt a problémát a kötegelt végrehajtási ablak bevezetésével, amelynek keretében a rendszer az összes ütemezett feladatot különböző alkalmazásokból egyszerre indítja el.
A működési elv azon a JobInfo objektumon alapul, amelyet az alkalmazás továbbít a JobScheduler-nek. A rendszer elmenti a feladatot, és elindítja, amikor minden megadott feltétel teljesül. A WorkManager-rel ellentétben a JobScheduler nem garantálja az újraindítást hiba esetén — ha egy feladat kivétellel összeomlik, a fejlesztőnek kell újra ütemeznie.
JobScheduler a JobService és JobInfo alapú architektúrát használ. A JobInfo leírja a feladatot és annak feltételeit, a JobService tartalmazza a végrehajtási logikát. Az alkalmazás regisztrálja a feladatot a getSystemService(JobScheduler.class) segítségével, és meghívja a schedule(jobInfo) függvényt. A rendszer átveszi az ütemezést.
JobService egy absztrakt osztály, amely a Service-ből származik. Két kulcsfontosságú metódust tartalmaz: onStartJob (a feladat indításakor hívódik meg) és onStopJob (a rendszer általi kényszerített leállításkor hívódik meg). A JobInfo a Builder segítségével jön létre, és tartalmazza a feladat összes paraméterét: azonosító, feltételek, időbeli korlátozások.
public class SyncJobService extends JobService {
@Override
public boolean onStartJob(JobParameters params) {
// A fő szálon hajtódik végre
Thread thread = new Thread(() -> {
performSync();
jobFinished(params, false);
});
thread.start();
return true; // true = a munka folytatódik
}
@Override
public boolean onStopJob(JobParameters params) {
return true; // true = feladat újraütemezése
}
}
JobScheduler lehetővé teszi több kritérium egyidejű beállítását: hálózat típusa (NETWORK_TYPE_ANY, NOT_ROAMING, UNMETERED), töltési állapot (requiresCharging), akkumulátor szintje (requiresBatteryNotLow), tároló állapota (requiresStorageNotLow) és készenléti mód (requiresDeviceIdle). A feladat csak akkor indul el, ha minden kritérium teljesül.
JobInfo.Builder rugalmas beállításokat biztosít minden háttérfeladathoz. A paraméterek megfelelő kombinációja lehetővé teszi az időben történő végrehajtás és az energiafogyasztás közötti egyensúly megteremtését.
| Metódus | Leírás | Példa |
|---|---|---|
| setRequiredNetworkType | Szükséges hálózati típus | NETWORK_TYPE_UNMETERED |
| setRequiresCharging | Eszköz töltődik | true |
| setRequiresDeviceIdle | Eszköz készenléti módban | true |
| setOverrideDeadline | Maximális várakozási idő (ms) | 300000 |
| setMinimumLatency | Minimális késleltetés (ms) | 60000 |
| setPeriodic | Időszakos végrehajtás (ms) | 3600000 |
| setBackoffCriteria | Újrapróbálkozási stratégia hiba esetén | LINEAR / EXPONENTIAL |
Fontos paraméter — setOverrideDeadline. Ha beállít egy határidőt, a rendszer garantálja, hogy a feladat addigra elindul, még akkor is, ha nem minden feltétel teljesül. Ez hasznos a kritikus végrehajtási idejű feladatokhoz, például szinkronizálás 6 óránként.
Tipikus forgatókönyv — adatszinkronizálás Wi-Fi kapcsolat és az eszköz töltése esetén. Az alkalmazás létrehoz egy JobInfo-t a megfelelő kritériumokkal, és továbbítja a JobScheduler-nek. A rendszer elindítja a feladatot a kedvező feltételek beálltakor.
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 óra
.build();
JobScheduler scheduler = (JobScheduler)
getSystemService(Context.JOB_SCHEDULER_SERVICE);
scheduler.schedule(jobInfo);
A JobService-t regisztrálni kell az AndroidManifest.xml-ben a BIND_JOB_SERVICE engedéllyel. Az onStartJob metódusban fontos, hogy a munka befejezése után meghívja a jobFinished-t — különben a rendszer azt feltételezi, hogy a feladat végtelenül fut, és kényszerítetten leállíthatja.
<service
android:name=".SyncJobService"
android:permission="android.permission.BIND_JOB_SERVICE" />
JobScheduler számos korlátozással rendelkezik. Először is, csak Android 5+-on érhető el — régebbi verziókhoz alternatíva szükséges. Másodszor, a rendszer késleltetheti a ritkán használt alkalmazások feladatait, különösen Android 9+-on az App Standby Buckets funkcióval. Harmadszor, a JobScheduler nem biztosít garantált újraindítási mechanizmust hiba esetén.
A Google a WorkManager használatát ajánlja a JobScheduler közvetlen használata helyett. A WorkManager a JobSchedulert használja a motorháztető alatt Android 5+-on, de hozzáadja a régebbi verziók támogatását, a végrehajtási garanciát, a feladatláncokat és az állapotfigyelést LiveData-n keresztül. Ha az alkalmazás csak Android 8+-t támogat, és nem igényel bonyolult háttérfeladat-logikát, a JobScheduler továbbra is indokolt lehet.
A JobScheduler hibakereséséhez használja a dumpsys jobscheduler parancsot ADB-n keresztül: a parancs megjeleníti az összes ütemezett feladatot, azok állapotát, hátralévő idejét és végrehajtási előzményeit. Egy adott alkalmazáshoz: adb shell dumpsys jobscheduler | grep csomagnév. Ez lehetővé teszi annak ellenőrzését, hogy a feladat regisztrálva van-e, milyen feltételek vannak beállítva, és miért nem indul el. Szintén elérhető a JobScheduler.getPendingJob() a feladat állapotának programozott ellenőrzéséhez. Ezenkívül használhatja az Android Studio Profiler-t az energiafogyasztás elemzéséhez a feladatok végrehajtása során. Android 5+-os alkalmazásokhoz a JobScheduler megbízható eszköz marad a nem pontos háttérfeladatokhoz hálózati és töltési feltételekkel.
Alapértelmezés szerint a JobService a fő szálon fut, ezért minden blokkoló művelet külön szál létrehozását vagy AsyncTask használatát igényli. A WorkManager-rel ellentétben a JobScheduler nem biztosít beépített szálkészletet. A fejlesztő maga kezeli a szálakat és a szinkronizációt. Javasolt a ThreadPoolExecutor használata párhuzamos feladatokhoz és a Handler a fő szállal való kommunikációhoz. Az onStopJob-ban fontos a futó szálak helyes megszakítása a szivárgások elkerülése érdekében.
A JobScheduler támogatja az időszakos feladatokat a setPeriodic(long intervalMillis) metóduson keresztül. A minimális intervallum 15 perc. Azonban a WorkManager-rel ellentétben a JobScheduler nem garantálja az intervallum pontos betartását — a rendszer eltolhatja a végrehajtást más feladatokkal való csoportosítás érdekében. A setPeriodic metódus nem támogatja a flex-intervallumot (rugalmas ablak), amely a későbbi API-verziókban jelent meg. Pontos időszakos végrehajtáshoz használja az AlarmManager-t a BroadcastReceiver-rel kombinálva.
Az Android 9-től kezdve a Google bevezette az App Standby Buckets-et, amely a használat gyakorisága szerint osztályozza az alkalmazásokat: Active, Working Set, Frequent, Rare. A Rare kategóriájú alkalmazások akár 24 órás késleltetést tapasztalnak a JobScheduler feladatok végrehajtásában. A fejlesztők csak az alkalmazás minőségén keresztül befolyásolhatják a kategóriát — a rendszermechanizmusok automatikusan növelik azoknak az alkalmazásoknak a prioritását, amelyekkel a felhasználó rendszeresen interakcióba lép. A JobScheduler figyelembe veszi ezt a besorolást, és a Rare alkalmazás feladata csak a karbantartási ablakban kerül végrehajtásra. Az Active kategóriájú alkalmazásoknál (leggyakrabban használt) a késleltetések minimálisak, és a feladatok gyakorlatilag azonnal végrehajtódnak a feltételek teljesülésekor.
Pontos kezdési idővel rendelkező időszakos feladatokhoz a JobScheduler nem alkalmas — használja az AlarmManager-t. Rövid egyszeri feladatokhoz — Foreground Service értesítéssel. A JobScheduler azokhoz a feladatokhoz optimális, ahol az energiahatékonyság fontos, nem az időpontosság: szinkronizálás, frissítések letöltése, adatok kötegelt feldolgozása. A háttérmunka eszközének helyes megválasztása közvetlenül befolyásolja a felhasználói élményt és az eszköz akkumulátorának élettartamát. A végső döntés — JobScheduler a feltételekkel történő kötegelt feldolgozáshoz, AlarmManager az ütemezett feladatokhoz, WorkManager mint univerzális ütemező.
Gyakran Ismételt Kérdések
Igen, a JobScheduler csoportosítja a különböző alkalmazások feladatait kötegekbe, és együtt hajtja végre azokat. Ez kulcsfontosságú előny az AlarmManager-rel szemben: ahelyett, hogy minden alkalmazás külön ébresztené az eszközt, a rendszer egyszer ébreszti a processzort, és feldolgozza az összes ütemezett feladatot.
Ha a jobFinished hívás nem történik meg ésszerű időn belül, a rendszer kényszerítetten meghívhatja az onStopJob-ot, és befejezheti a feladatot. Javasolt néhány percen belül befejezni egy feladatot, és mindig meghívni a jobFinished-t a befejezés után.
Doze módban a JobScheduler elhalasztja az összes feladatot a következő karbantartási ablakig (maintenance window), amely időszakosan érkezik. A setOverrideDeadline használata garantálja, hogy a feladat ezen ablakok figyelembevételével kerül végrehajtásra, de nem feltétlenül pontos időben.
WorkManager egy könyvtár, amely a motorháztető alatt a JobSchedulert használja Android 5+-on. A WorkManager hozzáadja a végrehajtási garanciát, a régebbi verziók támogatását (API 14+), a Worker láncokat, az állapotfigyelést LiveData/Flow-n keresztül, és az automatikus újrapróbálkozást hibák esetén.
A törléshez használja a scheduler.cancel(JOB_ID) függvényt egy adott feladathoz, vagy a scheduler.cancelAll() függvényt az alkalmazás összes feladatához. Győződjön meg arról, hogy a feladat azonosítója megegyezik a JobInfo létrehozásakor megadottal, ellenkező esetben a feladat nem lesz törölve.
A fejlesztők számára fontos megérteni, hogy a JobScheduler egy alacsony szintű rendszer-API, amely tapasztalt csapatok számára készült, akik teljes irányítást szeretnének az eszköz háttérfeladatai felett. A legtöbb alkalmazáshoz a WorkManager ugyanazt a funkcionalitást nyújtja egy egyszerűbb, biztonságosabb és modernebb API-val Androidhoz.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is