JobScheduler Android में एक सिस्टम सेवा है, जिसे API 21 (Android 5.0 Lollipop) में पेश किया गया था, जो एप्लिकेशन को निर्दिष्ट शर्तों के आधार पर बैकग्राउंड कार्यों के निष्पादन को शेड्यूल करने की अनुमति देता है। AlarmManager के विपरीत, JobScheduler को सटीक निष्पादन समय की आवश्यकता नहीं होती — सिस्टम स्वयं एप्लिकेशन की आवश्यकताओं और डिवाइस की वर्तमान स्थिति को मिलाकर इष्टतम क्षण निर्धारित करता है। Android Developers, 2026 के अनुसार, सेवा नेटवर्क, चार्ज, स्टोरेज स्थिति और डिवाइस निष्क्रियता के मापदंडों का समर्थन करती है।
मुख्य बातें
JobScheduler Android में एक सिस्टम सेवा है जो बिजली की खपत को कम करने के लिए कई बैकग्राउंड कार्यों को बैचों में समूहित करती है। प्रत्येक एप्लिकेशन द्वारा अपना कार्य करने के लिए डिवाइस को जगाने के बजाय, JobScheduler उन्हें एक साथ समूहित करता है और इष्टतम क्षण में निष्पादित करता है जब डिवाइस पहले से सक्रिय हो। यह बैटरी जीवन को काफी बढ़ाता है।
JobScheduler से पहले, डेवलपर बैकग्राउंड कार्यों के लिए AlarmManager और BroadcastReceiver का उपयोग करते थे। इस दृष्टिकोण की समस्या यह थी कि प्रत्येक एप्लिकेशन स्वतंत्र रूप से डिवाइस को जगाता था, जिससे बैटरी तेजी से खत्म होती थी। JobScheduler ने बैच निष्पादन विंडो शुरू करके इस समस्या को हल किया, जिसके तहत सिस्टम एक साथ विभिन्न एप्लिकेशन के सभी शेड्यूल किए गए कार्यों को लॉन्च करता है।
कार्य सिद्धांत JobInfo ऑब्जेक्ट पर आधारित है जिसे एप्लिकेशन JobScheduler को भेजता है। सिस्टम कार्य को सहेजता है और जब सभी निर्दिष्ट शर्तें पूरी होती हैं तो उसे निष्पादित करता है। WorkManager के विपरीत, JobScheduler विफलता पर पुनः आरंभ की गारंटी नहीं देता — यदि कोई कार्य अपवाद फेंकता है, तो डेवलपर को इसे मैन्युअल रूप से पुनः शेड्यूल करना होगा।
JobScheduler JobService और JobInfo पर आधारित आर्किटेक्चर का उपयोग करता है। JobInfo कार्य और उसकी शर्तों का वर्णन करता है, JobService में निष्पादन तर्क होता है। एप्लिकेशन getSystemService(JobScheduler.class) के माध्यम से कार्य को पंजीकृत करता है और schedule(jobInfo) को कॉल करता है। सिस्टम शेड्यूलिंग का ध्यान रखता है।
JobService एक अमूर्त वर्ग है जो Service से विरासत में मिलता है। इसमें दो मुख्य विधियाँ हैं: onStartJob (कार्य शुरू होने पर कॉल होता है) और onStopJob (सिस्टम द्वारा कार्य को बलपूर्वक रोकने पर कॉल होता है)। JobInfo Builder के माध्यम से बनाया जाता है और इसमें सभी कार्य पैरामीटर होते हैं: पहचानकर्ता, शर्तें, समय सीमाएँ।
public class SyncJobService extends JobService {
@Override
public boolean onStartJob(JobParameters params) {
// मुख्य थ्रेड पर चलता है
Thread thread = new Thread(() -> {
performSync();
jobFinished(params, false);
});
thread.start();
return true; // true = काम जारी है
}
@Override
public boolean onStopJob(JobParameters params) {
return true; // true = कार्य पुनर्निर्धारित करें
}
}
JobScheduler एक साथ कई मापदंड सेट करने की अनुमति देता है: नेटवर्क प्रकार (NETWORK_TYPE_ANY, NOT_ROAMING, UNMETERED), चार्जिंग स्थिति (requiresCharging), बैटरी स्तर (requiresBatteryNotLow), स्टोरेज स्थिति (requiresStorageNotLow) और निष्क्रिय मोड (requiresDeviceIdle)। कार्य तभी चलता है जब सभी मापदंड पूरे हों।
JobInfo.Builder प्रत्येक बैकग्राउंड कार्य के लिए लचीली सेटिंग्स प्रदान करता है। पैरामीटर का सही संयोजन निष्पादन की समयबद्धता और बिजली की खपत के बीच संतुलन बनाने की अनुमति देता है।
| विधि | विवरण | उदाहरण |
|---|---|---|
| setRequiredNetworkType | आवश्यक नेटवर्क प्रकार | NETWORK_TYPE_UNMETERED |
| setRequiresCharging | डिवाइस चार्ज हो रहा है | true |
| setRequiresDeviceIdle | डिवाइस निष्क्रिय है | true |
| setOverrideDeadline | अधिकतम प्रतीक्षा समय (मि.से.) | 300000 |
| setMinimumLatency | न्यूनतम विलंब (मि.से.) | 60000 |
| setPeriodic | आवधिक निष्पादन (मि.से.) | 3600000 |
| setBackoffCriteria | विफलता पर पुनः प्रयास रणनीति | LINEAR / EXPONENTIAL |
एक महत्वपूर्ण पैरामीटर setOverrideDeadline है। यदि समय सीमा निर्दिष्ट की जाती है, तो सिस्टम गारंटी देता है कि कार्य उस समय तक चलेगा, भले ही सभी शर्तें पूरी न हों। यह समय-महत्वपूर्ण कार्यों के लिए उपयोगी है, जैसे हर 6 घंटे में सिंक्रोनाइज़ेशन।
एक सामान्य परिदृश्य Wi-Fi से कनेक्ट होने और डिवाइस चार्ज होने पर डेटा सिंक्रोनाइज़ेशन है। एप्लिकेशन संबंधित मापदंडों के साथ JobInfo बनाता है और इसे JobScheduler को भेजता है। अनुकूल परिस्थितियाँ आने पर सिस्टम कार्य चलाता है।
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 घंटे
.build();
JobScheduler scheduler = (JobScheduler)
getSystemService(Context.JOB_SCHEDULER_SERVICE);
scheduler.schedule(jobInfo);
JobService को AndroidManifest.xml में BIND_JOB_SERVICE अनुमति के साथ पंजीकृत होना चाहिए। onStartJob विधि में कार्य पूरा करने के बाद jobFinished को कॉल करना महत्वपूर्ण है — अन्यथा सिस्टम कार्य को अनिश्चित काल तक चलने वाला मानेगा और उसे बलपूर्वक रोक सकता है।
<service
android:name=".SyncJobService"
android:permission="android.permission.BIND_JOB_SERVICE" />
JobScheduler की कई सीमाएँ हैं। पहली, यह केवल Android 5+ पर उपलब्ध है — पुराने संस्करणों के लिए विकल्प चाहिए। दूसरी, सिस्टम कम उपयोग किए जाने वाले एप्लिकेशन के कार्यों में देरी कर सकता है, विशेष रूप से Android 9+ पर App Standby Buckets के साथ। तीसरी, JobScheduler विफलता पर गारंटीकृत पुनः आरंभ तंत्र प्रदान नहीं करता।
Google सीधे JobScheduler उपयोग के बजाय WorkManager का उपयोग करने की सलाह देता है। WorkManager Android 5+ पर अंदरूनी तौर पर JobScheduler का उपयोग करता है, लेकिन पुराने संस्करणों के लिए समर्थन, निष्पादन गारंटी, कार्य श्रृंखला और LiveData के माध्यम से स्थिति निरीक्षण जोड़ता है। यदि आपका एप्लिकेशन केवल Android 8+ का समर्थन करता है और जटिल बैकग्राउंड कार्य तर्क की आवश्यकता नहीं है, तो JobScheduler अभी भी उचित हो सकता है।
JobScheduler को डीबग करने के लिए, ADB के माध्यम से dumpsys jobscheduler का उपयोग करें: कमांड सभी शेड्यूल किए गए कार्यों, उनकी स्थिति, शेष समय और निष्पादन इतिहास दिखाता है। किसी विशिष्ट एप्लिकेशन के लिए: adb shell dumpsys jobscheduler | grep package_name। इससे आप जाँच सकते हैं कि कार्य पंजीकृत है या नहीं, क्या शर्तें निर्धारित हैं और यह क्यों नहीं चल रहा है। आप प्रोग्रामेटिक रूप से कार्य स्थिति की जाँच करने के लिए JobScheduler.getPendingJob() का भी उपयोग कर सकते हैं। इसके अतिरिक्त, कार्य निष्पादन के दौरान बिजली की खपत का विश्लेषण करने के लिए Android Studio Profiler का उपयोग किया जा सकता है। Android 5+ पर एप्लिकेशन के लिए, JobScheduler नेटवर्क और चार्जिंग शर्तों के साथ अचूक बैकग्राउंड कार्यों के लिए एक विश्वसनीय उपकरण बना हुआ है।
डिफ़ॉल्ट रूप से, JobService मुख्य थ्रेड पर चलता है, इसलिए सभी अवरोधक संचालन के लिए एक अलग थ्रेड बनाने या AsyncTask का उपयोग करने की आवश्यकता होती है। WorkManager के विपरीत, JobScheduler एक अंतर्निहित थ्रेड पूल प्रदान नहीं करता। डेवलपर स्वतंत्र रूप से थ्रेड और सिंक्रोनाइज़ेशन का प्रबंधन करता है। समानांतर कार्यों के लिए ThreadPoolExecutor और मुख्य थ्रेड के साथ संचार के लिए Handler का उपयोग करने की अनुशंसा की जाती है। onStopJob में, लीक से बचने के लिए चल रहे थ्रेड को सही ढंग से बाधित करना महत्वपूर्ण है।
JobScheduler setPeriodic(long intervalMillis) विधि के माध्यम से आवधिक कार्यों का समर्थन करता है। न्यूनतम अंतराल 15 मिनट है। हालांकि, WorkManager के विपरीत, JobScheduler सटीक अंतराल पालन की गारंटी नहीं देता — सिस्टम अन्य कार्यों के साथ बैच करने के लिए निष्पादन को स्थानांतरित कर सकता है। setPeriodic विधि लचीले अंतराल (फ्लेक्स विंडो) का भी समर्थन नहीं करती, जो बाद के API संस्करणों में दिखाई दिया। सटीक आवधिक निष्पादन के लिए, BroadcastReceiver के साथ संयोजन में AlarmManager का उपयोग करें।
Android 9 से शुरू करके, Google ने App Standby Buckets पेश किया, जो उपयोग आवृत्ति के अनुसार एप्लिकेशन को वर्गीकृत करता है: Active, Working Set, Frequent, Rare। Rare श्रेणी के एप्लिकेशन को JobScheduler कार्यों में 24 घंटे तक की देरी का अनुभव होता है। डेवलपर केवल एप्लिकेशन गुणवत्ता के माध्यम से श्रेणी को प्रभावित कर सकते हैं — सिस्टम तंत्र स्वचालित रूप से उन एप्लिकेशन की प्राथमिकता बढ़ाते हैं जिनके साथ उपयोगकर्ता नियमित रूप से बातचीत करता है। JobScheduler इस वर्गीकरण को ध्यान में रखता है, और Rare एप्लिकेशन का कार्य केवल रखरखाव विंडो में निष्पादित किया जाएगा। Active श्रेणी (सबसे अधिक उपयोग किए जाने वाले) के एप्लिकेशन के लिए, देरी न्यूनतम होती है और शर्तें पूरी होने पर कार्य लगभग तुरंत चलते हैं।
सटीक समय वाले आवधिक कार्यों के लिए, JobScheduler उपयुक्त नहीं है — AlarmManager का उपयोग करें। छोटे एकल कार्यों के लिए — अधिसूचना के साथ Foreground Service। JobScheduler उन कार्यों के लिए इष्टतम है जहाँ समय सटीकता की तुलना में ऊर्जा दक्षता अधिक महत्वपूर्ण है: सिंक्रोनाइज़ेशन, अपडेट डाउनलोड, बैच डेटा प्रोसेसिंग। बैकग्राउंड कार्य उपकरण का सही चयन सीधे उपयोगकर्ता अनुभव और डिवाइस की बैटरी जीवन को प्रभावित करता है। अंतिम निष्कर्ष: शर्तों के साथ बैच प्रोसेसिंग के लिए JobScheduler, शेड्यूल किए गए कार्यों के लिए AlarmManager, और सार्वभौमिक शेड्यूलर के रूप में WorkManager का उपयोग करें।
अक्सर पूछे जाने वाले प्रश्न
हाँ, JobScheduler विभिन्न एप्लिकेशन के कार्यों को बैचों में समूहित करता है और उन्हें एक साथ निष्पादित करता है। यह AlarmManager पर एक मुख्य लाभ है: प्रत्येक एप्लिकेशन द्वारा अलग-अलग डिवाइस जगाने के बजाय, सिस्टम एक बार प्रोसेसर जगाता है और सभी शेड्यूल किए गए कार्यों को संसाधित करता है।
यदि उचित समय के भीतर jobFinished कॉल नहीं किया गया, तो सिस्टम बलपूर्वक onStopJob कॉल कर सकता है और कार्य समाप्त कर सकता है। एक कार्य को कुछ मिनटों में पूरा करने और पूरा होने पर हमेशा jobFinished कॉल करने की अनुशंसा की जाती है।
Doze Mode में, JobScheduler सभी कार्यों को अगली रखरखाव विंडो तक स्थगित कर देता है, जो समय-समय पर आती है। setOverrideDeadline का उपयोग यह सुनिश्चित करता है कि कार्य इन विंडो को ध्यान में रखते हुए निष्पादित होगा, लेकिन जरूरी नहीं कि सटीक समय पर।
WorkManager एक लाइब्रेरी है जो Android 5+ पर अंदरूनी तौर पर JobScheduler का उपयोग करती है। WorkManager निष्पादन गारंटी, पुराने संस्करणों (API 14+) के लिए समर्थन, Worker श्रृंखला, LiveData/Flow के माध्यम से स्थिति निरीक्षण और विफलता पर स्वचालित पुनः प्रयास जोड़ता है।
रद्द करने के लिए, किसी विशिष्ट कार्य के लिए scheduler.cancel(JOB_ID) या एप्लिकेशन के सभी कार्यों के लिए scheduler.cancelAll() का उपयोग करें। सुनिश्चित करें कि Job ID, JobInfo बनाते समय निर्दिष्ट ID से मेल खाता हो, अन्यथा कार्य रद्द नहीं होगा।
डेवलपर को समझना चाहिए कि JobScheduler एक निम्न-स्तरीय सिस्टम API है जो अनुभवी टीमों के लिए डिज़ाइन किया गया है जो डिवाइस पर बैकग्राउंड कार्यों पर पूर्ण नियंत्रण चाहते हैं। अधिकांश एप्लिकेशन के लिए, WorkManager Android के लिए एक सरल, सुरक्षित और अधिक आधुनिक API के साथ समान कार्यक्षमता प्रदान करता है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें