JobScheduler: esensya, API at pag-iiskedyul ng gawain

May-akda: IT Sectr Nai-publish: 2026-03-27 Oras ng pagbabasa: 8 min

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 ang system API ng Android 5+ para sa batch processing ng mga gawain sa background na may mga kondisyon sa pagsisimula.
  • JobService ay ang base handler class na tinatawag ng system kapag natugunan ang mga kondisyon ng pagpapatupad.
  • JobInfo ay ang object na naglalarawan ng mga parameter ng gawain: uri ng network, estado ng baterya, deadline, at pagkaantala.
  • Mga pamantayan sa pagsisimula ay kinabibilangan ng koneksyon sa Wi-Fi, pag-charge, pagkakaroon ng libreng espasyo, at idle ng device.
  • WorkManager ay gumagamit ng JobScheduler sa ilalim ng hood sa Android 5+, na nag-aalok ng mas mataas na antas ng API.

Ano ang JobScheduler?

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.

Paano Gumagana ang JobScheduler?

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

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.

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

Mga pamantayan sa pagsisimula ng 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.

Mga Parameter ng JobInfo

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.

ParaanPaglalarawanHalimbawa
setRequiredNetworkTypeKinakailangang uri ng networkNETWORK_TYPE_UNMETERED
setRequiresChargingAng device ay nagcha-chargetrue
setRequiresDeviceIdleAng device ay nasa standby modetrue
setOverrideDeadlinePinakamataas na oras ng paghihintay (ms)300000
setMinimumLatencyPinakamababang pagkaantala (ms)60000
setPeriodicPana-panahong pagpapatupad (ms)3600000
setBackoffCriteriaEstratehiya ng pag-ulit kapag nabigoLINEAR / 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.

Halimbawa ng Paggamit ng JobScheduler

Pag-iskedyul ng gawain na may maraming kondisyon

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.

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

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

Pagrehistro ng JobService sa manifest

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.

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

Mga Limitasyon at Alternatibo

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.

Pagsubaybay at Pag-debug ng JobScheduler

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.

JobScheduler sa Multi-Thread na mga Senaryo

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.

Mga Pana-panahong Gawain sa pamamagitan ng JobScheduler

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.

App Standby Buckets at Epekto sa JobScheduler

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

Toto ba na pinagsasama ng JobScheduler ang mga gawain ng iba't ibang application?

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.

Ano ang mangyayari kung ang isang gawain sa JobService ay tumatakbo nang masyadong mahaba?

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.

Paano kumikilos ang JobScheduler sa Doze Mode?

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.

Ano ang pagkakaiba ng JobScheduler sa WorkManager?

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.

Paano kanselahin ang isang naka-iskedyul na gawain sa JobScheduler?

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

  • JobScheduler ay isang serbisyo ng sistema ng Android 5+ para sa batch execution ng mga gawain sa background na may tinukoy na mga kondisyon.
  • Arkitektura ay binuo sa paligid ng JobService (lohika) at JobInfo (mga parameter), na naka-rehistro sa pamamagitan ng AndroidManifest.
  • Mga pamantayan sa pagsisimula ay kinabibilangan ng network, pag-charge, estado ng storage, at idle ng device.
  • setOverrideDeadline ay ang tanging paraan upang garantisahin ang pagpapatupad ng gawain sa isang tiyak na oras.
  • Batch execution ay pinagsasama ang mga gawain ng iba't ibang application, binabawasan ang kabuuang konsumo ng kuryente ng device.
  • WorkManager ay ang mas gustong alternatibo na may garantiya ng pagpapatupad at suporta para sa mas lumang bersyon ng Android.
  • Huwag gamitin ang JobScheduler para sa mga gawaing may eksaktong oras — para dito ang AlarmManager ay angkop.

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.

Pag-usapan ang proyekto

Basahin din