JobScheduler ay isang serbisyo ng sistema ng Android na ipinakilala sa API 21 (Android 5.0 Lollipop) na nagpapahintulot sa mga application na mag-iskedyul ng pagpapatupad ng mga gawain sa background batay sa mga tinukoy na kondisyon. Hindi tulad ng AlarmManager, ang JobScheduler ay hindi nangangailangan ng eksaktong oras ng pagsisimula — ang sistema mismo ang tumutukoy sa pinakamainam na sandali sa pamamagitan ng pagsasama ng mga kinakailangan ng application sa kasalukuyang estado ng device. Ayon sa Android Developers, 2026, sinusuportahan ng serbisyo ang mga pamantayan para sa network, pag-charge, estado ng storage, at idle ng device.
Mga Pangunahing Punto
JobScheduler ay isang serbisyo ng sistema ng Android na pinagsasama ang maraming gawain sa background sa mga batch upang mabawasan ang konsumo ng kuryente. Sa halip na bawat application ay gisingin ang device para isagawa ang gawain nito, pinapangkat sila ng JobScheduler at isinasagawa sa pinakamainam na sandali kapag aktibo na ang device. Ito ay makabuluhang nagpapahaba ng buhay ng baterya.
Bago ang pagdating ng JobScheduler, ang mga developer ay gumagamit ng AlarmManager at BroadcastReceiver para sa mga gawain sa background. Ang problema ng pamamaraang ito — bawat application ay independiyenteng ginigising ang device, na nagreresulta sa mabilis na pagkaubos ng baterya. Nalutas ng JobScheduler ang problemang ito sa pamamagitan ng pagpapakilala ng batch execution window, kung saan sabay-sabay na inilulunsad ng system ang lahat ng naka-iskedyul na gawain ng iba't ibang application.
Ang prinsipyo ng pagpapatakbo ay batay sa JobInfo object na ipinapasa ng application sa JobScheduler. Iniimbak ng system ang gawain at inilulunsad ito kapag natugunan ang lahat ng tinukoy na kondisyon. Hindi tulad ng WorkManager, hindi ginagarantiyahan ng JobScheduler ang muling pagsisimula kung sakaling mabigo — kung ang isang gawain ay bumagsak na may exception, dapat itong muling i-iskedyul ng developer mismo.
JobScheduler ay gumagamit ng arkitekturang batay sa JobService at JobInfo. Inilalarawan ng JobInfo ang gawain at mga kondisyon nito, ang JobService ay naglalaman ng lohika ng pagpapatupad. Ang application ay nagrerehistro ng gawain sa pamamagitan ng getSystemService(JobScheduler.class) at tumatawag ng schedule(jobInfo). Ang system ang pumapalit sa pag-iiskedyul.
JobService ay isang abstract class na nagmamana mula sa Service. Naglalaman ito ng dalawang pangunahing pamamaraan: onStartJob (tinatawag kapag sinimulan ang gawain) at onStopJob (tinatawag kapag pinilit na itigil ng system). Ang JobInfo ay nilikha sa pamamagitan ng Builder at naglalaman ng lahat ng parameter ng gawain: identifier, kondisyon, mga limitasyon sa oras.
public class SyncJobService extends JobService {
@Override
public boolean onStartJob(JobParameters params) {
// Isinasagawa sa pangunahing thread
Thread thread = new Thread(() -> {
performSync();
jobFinished(params, false);
});
thread.start();
return true; // true = nagpapatuloy ang trabaho
}
@Override
public boolean onStopJob(JobParameters params) {
return true; // true = muling i-iskedyul ang gawain
}
}
JobScheduler ay nagpapahintulot sa pagtatakda ng maraming pamantayan nang sabay-sabay: uri ng network (NETWORK_TYPE_ANY, NOT_ROAMING, UNMETERED), estado ng pag-charge (requiresCharging), antas ng baterya (requiresBatteryNotLow), estado ng storage (requiresStorageNotLow), at mode ng standby (requiresDeviceIdle). Ang gawain ay inilulunsad lamang kapag natugunan ang lahat ng pamantayan.
JobInfo.Builder ay nagbibigay ng nababagong mga setting para sa bawat gawain sa background. Ang tamang kumbinasyon ng mga parameter ay nagbibigay-daan sa pagbabalanse sa pagitan ng napapanahong pagpapatupad at konsumo ng kuryente.
| Paraan | Paglalarawan | Halimbawa |
|---|---|---|
| setRequiredNetworkType | Kinakailangang uri ng network | NETWORK_TYPE_UNMETERED |
| setRequiresCharging | Ang device ay nagcha-charge | true |
| setRequiresDeviceIdle | Ang device ay nasa standby mode | true |
| setOverrideDeadline | Pinakamataas na oras ng paghihintay (ms) | 300000 |
| setMinimumLatency | Pinakamababang pagkaantala (ms) | 60000 |
| setPeriodic | Pana-panahong pagpapatupad (ms) | 3600000 |
| setBackoffCriteria | Estratehiya ng pag-ulit kapag nabigo | LINEAR / EXPONENTIAL |
Isang mahalagang parameter — setOverrideDeadline. Kung magtatakda ka ng deadline, garantisadong ilulunsad ng system ang gawain sa oras na iyon, kahit na hindi lahat ng kondisyon ay natugunan. Ito ay kapaki-pakinabang para sa mga gawaing may kritikal na oras ng pagpapatupad, halimbawa, pag-sync bawat 6 na oras.
Karaniwang senaryo — pag-sync ng data kapag konektado sa Wi-Fi at nagcha-charge ang device. Gumagawa ang application ng JobInfo na may kaukulang pamantayan at ipinapasa ito sa JobScheduler. Inilulunsad ng system ang gawain kapag natugunan ang mga paborableng kondisyon.
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 na oras
.build();
JobScheduler scheduler = (JobScheduler)
getSystemService(Context.JOB_SCHEDULER_SERVICE);
scheduler.schedule(jobInfo);
Ang JobService ay dapat na nakarehistro sa AndroidManifest.xml na may pahintulot na BIND_JOB_SERVICE. Sa pamamaraang onStartJob, mahalagang tawagan ang jobFinished pagkatapos makumpleto ang trabaho — kung hindi, iisipin ng system na ang gawain ay tumatakbo nang walang katapusan at maaari itong puwersahing ihinto.
<service
android:name=".SyncJobService"
android:permission="android.permission.BIND_JOB_SERVICE" />
JobScheduler ay may ilang mga limitasyon. Una, available lamang ito sa Android 5+ — para sa mas lumang mga bersyon ay kinakailangan ng alternatibo. Pangalawa, maaaring maantala ng system ang mga gawain ng mga application na madalang gamitin, lalo na sa Android 9+ na may tampok na App Standby Buckets. Pangatlo, ang JobScheduler ay hindi nagbibigay ng mekanismo ng garantisadong muling pagsisimula kung sakaling mabigo.
Inirerekomenda ng Google ang paggamit ng WorkManager sa halip na direktang paggamit ng JobScheduler. Ginagamit ng WorkManager ang JobScheduler sa ilalim ng hood sa Android 5+, ngunit nagdaragdag ng suporta para sa mas lumang bersyon, garantiya ng pagpapatupad, mga chain ng gawain, at pagsubaybay sa estado sa pamamagitan ng LiveData. Kung ang application ay sumusuporta lamang ng Android 8+ at hindi nangangailangan ng kumplikadong lohika ng gawain sa background, ang JobScheduler ay maaari pa ring maging makatwiran.
Para sa pag-debug ng JobScheduler, gamitin ang dumpsys jobscheduler sa pamamagitan ng ADB: ang utos ay nagpapakita ng lahat ng naka-iskedyul na gawain, ang kanilang katayuan, natitirang oras, at kasaysayan ng pagpapatupad. Para sa isang partikular na application: adb shell dumpsys jobscheduler | grep pangalan_package. Ito ay nagbibigay-daan sa pagsuri kung ang gawain ay naka-rehistro, anong mga kondisyon ang itinakda, at kung bakit hindi ito inilulunsad. Available din ang JobScheduler.getPendingJob() para sa programmatic na pagsusuri ng katayuan ng gawain. Bukod pa rito, maaari mong gamitin ang Android Studio Profiler para sa pagsusuri ng konsumo ng kuryente sa panahon ng pagpapatupad ng gawain. Para sa mga application sa Android 5+, ang JobScheduler ay nananatiling isang maaasahang kasangkapan para sa hindi tumpak na mga gawain sa background na may mga kondisyon sa network at pag-charge.
Bilang default, ang JobService ay tumatakbo sa pangunahing thread, kaya ang lahat ng mga operasyong humaharang ay nangangailangan ng paglikha ng hiwalay na thread o paggamit ng AsyncTask. Hindi tulad ng WorkManager, ang JobScheduler ay hindi nagbibigay ng built-in na thread pool. Ang developer ang namamahala ng mga thread at synchronization nang mag-isa. Inirerekomenda ang paggamit ng ThreadPoolExecutor para sa mga parallel na gawain at Handler para sa komunikasyon sa pangunahing thread. Sa onStopJob, mahalagang wastong matakpan ang mga tumatakbong thread upang maiwasan ang pagtagas.
Sinusuportahan ng JobScheduler ang mga pana-panahong gawain sa pamamagitan ng pamamaraang setPeriodic(long intervalMillis). Ang minimum na interval ay 15 minuto. Gayunpaman, hindi tulad ng WorkManager, hindi ginagarantiyahan ng JobScheduler ang eksaktong pagsunod sa interval — maaaring ilipat ng system ang pagpapatupad para sa pagpapangkat sa iba pang mga gawain. Ang pamamaraang setPeriodic ay hindi rin sumusuporta sa flex-interval (nababagong window) na lumitaw sa mga susunod na bersyon ng API. Para sa eksaktong pana-panahong pagpapatupad, gamitin ang AlarmManager kasama ng BroadcastReceiver.
Simula sa Android 9, ipinakilala ng Google ang App Standby Buckets, na nag-uuri ng mga application batay sa dalas ng paggamit: Active, Working Set, Frequent, Rare. Ang mga application sa kategoryang Rare ay nakakaranas ng mga pagkaantala sa pagpapatupad ng mga gawain ng JobScheduler hanggang 24 na oras. Maaaring maimpluwensyahan ng mga developer ang kategorya sa pamamagitan lamang ng kalidad ng application — awtomatikong tinataas ng mga mekanismo ng system ang priyoridad ng mga application na regular na nakikipag-ugnayan ang user. Isinasaalang-alang ng JobScheduler ang pag-uuri na ito, at ang gawain ng application mula sa Rare ay isasagawa lamang sa maintenance window. Para sa mga application mula sa kategoryang Active (pinaka-madalas gamitin) ang mga pagkaantala ay minimal at ang mga gawain ay isinasagawa halos kaagad kapag natugunan ang mga kondisyon.
Para sa mga pana-panahong gawain na may eksaktong oras ng pagsisimula, hindi angkop ang JobScheduler — gamitin ang AlarmManager. Para sa maiikling isang beses na gawain — Foreground Service na may notification. Ang JobScheduler ay pinakamainam para sa mga gawain kung saan ang kahusayan sa enerhiya ay mahalaga, hindi ang katumpakan ng oras: pag-sync, pag-download ng mga update, batch processing ng data. Ang tamang pagpili ng kasangkapan para sa background na trabaho ay direktang nakakaapekto sa karanasan ng gumagamit at sa buhay ng baterya ng device. Ang pangwakas na desisyon — JobScheduler para sa batch processing na may mga kondisyon, AlarmManager para sa mga gawain ayon sa iskedyul, WorkManager bilang unibersal na taga-iskedyul.
Mga Madalas Itanong
Oo, pinapangkat ng JobScheduler ang mga gawain mula sa iba't ibang application sa mga batch at isinasagawa ang mga ito nang magkasama. Ito ang pangunahing bentahe kumpara sa AlarmManager: sa halip na bawat application ay gisingin ang device nang hiwalay, ginigising ng system ang processor nang isang beses at pinoproseso ang lahat ng naka-iskedyul na gawain.
Kung ang tawag sa jobFinished ay hindi ginawa sa loob ng makatwirang oras, maaaring puwersahing tawagan ng system ang onStopJob at tapusin ang gawain. Inirerekomenda na matapos sa loob ng ilang minuto para sa isang gawain at palaging tawagan ang jobFinished pagkatapos makumpleto.
Sa Doze Mode, ipinagpapaliban ng JobScheduler ang lahat ng gawain hanggang sa susunod na maintenance window, na pana-panahong dumarating. Ang paggamit ng setOverrideDeadline ay ginagarantiyahan na ang gawain ay isasagawa na isinasaalang-alang ang mga window na ito, ngunit hindi kinakailangan sa eksaktong oras.
WorkManager ay isang library na sa ilalim ng hood ay gumagamit ng JobScheduler sa Android 5+. Nagdaragdag ang WorkManager ng garantiya ng pagpapatupad, suporta para sa mas lumang bersyon (API 14+), mga chain ng Worker, pagsubaybay sa estado sa pamamagitan ng LiveData/Flow, at awtomatikong pag-ulit kapag nabigo.
Para sa pagkansela gamitin ang scheduler.cancel(JOB_ID) para sa isang partikular na gawain o scheduler.cancelAll() para sa lahat ng gawain ng application. Tiyakin na ang Job ID ay tumutugma sa itinakda sa paggawa ng JobInfo, kung hindi ang gawain ay hindi makakansela.
Mahalaga para sa mga developer na maunawaan na ang JobScheduler ay isang mababang antas na system API, na nilayon para sa mga may karanasang koponan na gustong magkaroon ng ganap na kontrol sa mga gawain sa background ng device. Para sa karamihan ng mga application, ang WorkManager ay nagbibigay ng parehong functionality na may mas simple, mas ligtas, at mas modernong API para sa Android.
Buod
Gagawa kami ng mobile application na turnkey
Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.
Basahin din