WorkManager एक Android Jetpack लाइब्रेरी है जो गारंटीकृत निष्पादन के साथ विलंबित और बैकग्राउंड कार्यों को करने के लिए डिज़ाइन की गई है। Service या JobScheduler के विपरीत, WorkManager कार्य के जीवनचक्र का प्रबंधन करता है: विफलता पर इसे पुनः आरंभ करता है, Android संस्करण के अनुकूल होता है, और डिवाइस की बाधाओं को ध्यान में रखता है। Android Developers, 2026 के अनुसार, आधुनिक Android विकास में अधिकांश बैकग्राउंड संचालन के लिए WorkManager पसंदीदा समाधान है।
मुख्य बिंदु
WorkManager Android Jetpack का हिस्सा है, एक लाइब्रेरी जो बैकग्राउंड कार्यों के प्रबंधन के लिए है जो गारंटीकृत रूप से निष्पादित होने चाहिए, चाहे ऐप अग्रभूमि में हो या उपयोगकर्ता द्वारा बंद कर दिया गया हो। लाइब्रेरी API 14+ का समर्थन करती है और स्वचालित रूप से उपयुक्त निष्पादन तंत्र चुनती है: Android 5+ पर JobScheduler, पुराने संस्करणों पर BroadcastReceiver + AlarmManager।
WorkManager की मुख्य विशेषता गारंटीकृत निष्पादन है। यदि डिवाइस रीबूट, ऐप समाप्ति या क्रैश के कारण कोई कार्य पूरा नहीं हुआ, तो WorkManager इसे अगले अवसर पर पुनः आरंभ करेगा। यह लाइब्रेरी को निष्पादन-महत्वपूर्ण कार्यों के लिए एक आदर्श विकल्प बनाता है: एनालिटिक्स भेजना, डेटाबेस सिंक्रोनाइज़ेशन, लॉग अपलोड।
Background Service के विपरीत, WorkManager को थ्रेड और जीवनचक्र प्रबंधन की आवश्यकता नहीं है। लाइब्रेरी स्वयं एक थ्रेड पूल बनाती है, Doze Mode को संभालती है, Android संस्करण को ध्यान में रखती है, और API स्तर की परवाह किए बिना एक एकीकृत API प्रदान करती है। Coroutine और RxJava समर्थन क्रमशः CoroutineWorker और RxWorker के माध्यम से उपलब्ध है।
WorkManager कार्य स्थितियों को ट्रैक करने के लिए अंतर्निहित LiveData समर्थन प्रदान करता है। getWorkInfoByIdLiveData विधि LiveData<WorkInfo> लौटाती है जो प्रत्येक स्थिति परिवर्तन पर अपडेट होती है: ENQUEUED, RUNNING, SUCCEEDED, FAILED, CANCELLED। यह UI घटकों को Lifecycle-aware घटकों की बदौलत शेड्यूलर की मैन्युअल पोलिंग और मेमोरी लीक के बिना परिवर्तनों पर प्रतिक्रिया करने की अनुमति देता है।
WorkManager.getInstance(context)
.getWorkInfoByIdLiveData(syncRequest.id)
.observe(viewLifecycleOwner) { workInfo ->
when (workInfo.state) {
WorkInfo.State.SUCCEEDED ->
showSuccess()
WorkInfo.State.FAILED ->
showError(workInfo.outputData)
else ->
showProgress()
}
}
WorkManager की आर्किटेक्चर तीन आधार वर्गों के आसपास बनाई गई है: Worker, WorkRequest और WorkManager। Worker में कार्य तर्क होता है, WorkRequest निष्पादन मापदंडों का वर्णन करता है, और WorkManager कतार और शेड्यूलिंग का प्रबंधन करता है। लाइब्रेरी सभी कार्यों की स्थिति को संग्रहीत करने के लिए एक आंतरिक Room डेटाबेस का उपयोग करती है।
Worker एक अमूर्त वर्ग है जिसमें एक एकल विधि doWork है जो बैकग्राउंड थ्रेड पर कॉल की जाती है। विधि ListenableWorker.Result — SUCCESS, FAILURE या RETRY लौटाती है। WorkRequest Worker को मापदंडों से जोड़ता है: टाइमआउट, टैग, प्रारंभिक विलंब और बाधाएँ।
class SyncWorker(
context: Context,
params: WorkerParameters
) : Worker(context, params) {
override fun doWork(): Result {
return try {
val api = RetrofitClient.api
val response = api.syncData()
Result.success()
} catch (e: Exception) {
Result.retry()
}
}
}
WorkManager Android संस्करण की परवाह किए बिना समान रूप से कार्यों को शेड्यूल करता है। enqueue कॉल करने पर, लाइब्रेरी कार्य को Room में सहेजती है, वर्तमान स्थितियों का मूल्यांकन करती है, और इष्टतम निष्पादन समय चुनती है। अंतर्निहित रूप से, यह JobScheduler, AlarmManager, या अपने स्वयं के शेड्यूलर का उपयोग कर सकता है — डेवलपर को इसके बारे में चिंता करने की आवश्यकता नहीं है।
val syncRequest = OneTimeWorkRequestBuilder<SyncWorker>()
.setInitialDelay(15, TimeUnit.MINUTES)
.addTag("sync")
.build()
WorkManager.getInstance(context)
.enqueue(syncRequest)
WorkManager दो प्रकार के निष्पादन अनुरोधों का समर्थन करता है: एक बार और आवधिक। प्रकार का चुनाव परिदृश्य पर निर्भर करता है: कार्य एक बार चलना चाहिए या दिए गए अंतराल पर दोहराया जाना चाहिए।
OneTimeWorkRequest उन कार्यों के लिए डिज़ाइन किया गया है जो एक बार निष्पादित होने चाहिए। यह लॉग सबमिशन, प्रमाणीकरण के बाद डेटा सिंक्रोनाइज़ेशन, पहले लॉन्च पर कॉन्फ़िगरेशन डाउनलोड हो सकता है। विलंब setInitialDelay के माध्यम से और बाधाएँ setConstraints के माध्यम से सेट की जाती हैं।
PeriodicWorkRequest न्यूनतम 15 मिनट के अंतराल के साथ दोहराए जाने वाले कार्यों के लिए उपयुक्त है। लाइब्रेरी गारंटी देती है कि रनों के बीच का अंतराल निर्दिष्ट से कम नहीं होगा, लेकिन डिवाइस बाधाओं के कारण अधिक हो सकता है। 15 मिनट से कम आवृत्ति वाले कार्यों के लिए, Foreground Service में Handler या Timer का उपयोग करें।
| पैरामीटर | OneTimeWorkRequest | PeriodicWorkRequest |
|---|---|---|
| आवृत्ति | एक बार | दोहराया (न्यूनतम 15 मिनट) |
| संख्या | 1 निष्पादन | रद्द होने तक |
| विलंब | setInitialDelay | setInitialDelay |
| श्रृंखलाएँ | समर्थन करता है | नहीं |
| उपयोग | डाउनलोड, सिंक | निगरानी, पोलिंग |
WorkManager में बाधाएँ आपको उन शर्तों को सेट करने की अनुमति देती हैं जिनके तहत कोई कार्य शुरू किया जा सकता है: नेटवर्क कनेक्टिविटी (NetworkType), बैटरी स्तर (batteryNotLow), स्टोरेज स्थिति (StorageNotLow) और निष्क्रिय मोड (DeviceIdle)। जब तक सभी बाधाएँ पूरी नहीं हो जातीं, कार्य शुरू नहीं होगा।
val constraints = Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.setRequiresCharging(true)
.setRequiresBatteryNotLow(true)
.build()
val request = OneTimeWorkRequestBuilder<ImageUploadWorker>()
.setConstraints(constraints)
.build()
श्रृंखलाएँ आपको अनुक्रमिक या समानांतर कार्य निष्पादन को व्यवस्थित करने की अनुमति देती हैं। beginWith एक श्रृंखला शुरू करता है, फिर अगला Worker जोड़ता है जो पिछले के सफल समापन के बाद निष्पादित होगा। समानांतर निष्पादन के लिए, workManager.enqueue(listOf(request1, request2)) का उपयोग करें।
WorkManager.getInstance(context)
.beginWith(compressWorker)
.then(uploadWorker)
.then(cleanupWorker)
.enqueue()
// compress -> upload -> cleanup क्रमिक रूप से
JobScheduler को Android 5 (API 21) में बैकग्राउंड कार्यों को शेड्यूल करने के लिए एक सिस्टम सेवा के रूप में पेश किया गया था। WorkManager इसे बदलने के लिए आया, जो स्वचालित माइग्रेशन और अतिरिक्त क्षमताओं के साथ एक क्रॉस-प्लेटफ़ॉर्म API प्रदान करता है: श्रृंखलाएँ, निष्पादन गारंटी, टैग, LiveData के माध्यम से स्थिति अवलोकन।
JobScheduler से WorkManager में माइग्रेट करते समय, आपको JobService को Worker में बदलना होगा, JobInfo को WorkRequest से और Context.getSystemService को WorkManager API से बदलना होगा। WorkManager स्वचालित रूप से संगतता समस्याओं को संभालता है और मैन्युअल JobScheduler कार्यान्वयन की तुलना में Doze Mode को अधिक सही ढंग से संभालता है। माइग्रेशन चरण: 1) Worker वर्ग बनाएँ, 2) समान शर्तों के साथ WorkRequest बनाएँ, 3) कोड और मेनिफेस्ट से JobService और JobInfo हटाएँ।
WorkManager ExistingWorkPolicy के माध्यम से अद्वितीय कार्यों की अवधारणा का समर्थन करता है। यदि निर्दिष्ट नाम वाला कोई कार्य पहले से मौजूद है, तो नीति व्यवहार निर्धारित करती है: KEEP (नया न बनाएँ), REPLACE (मौजूदा को बदलें), APPEND (श्रृंखला के अंत में जोड़ें) और APPEND_OR_REPLACE। UniqueWorkRequest उन कार्यों के लिए सुविधाजनक है जिन्हें डुप्लिकेट नहीं किया जाना चाहिए: डेटाबेस सिंक्रोनाइज़ेशन, कॉन्फ़िगरेशन डाउनलोड, एनालिटिक्स बैच सबमिशन।
WorkManager.getInstance(context)
.enqueueUniqueWork(
"sync_data",
ExistingWorkPolicy.KEEP,
syncRequest
)
CoroutineWorker setProgress तंत्र का समर्थन करता है, जो मध्यवर्ती निष्पादन परिणामों को पास करने की अनुमति देता है। यह लंबे समय तक चलने वाले संचालन के लिए उपयोगी है: बड़ी फ़ाइल डाउनलोड, बैच इमेज प्रोसेसिंग, डेटाबेस माइग्रेशन। UI getWorkInfosByTagLiveData के माध्यम से अपडेट की सदस्यता ले सकता है और रीयल-टाइम प्रगति प्रदर्शित कर सकता है। ForegroundInfo विधि भी उपलब्ध है ताकि Worker को Foreground Service के रूप में एक सूचना के साथ चलाया जा सके यदि कार्य उपयोगकर्ता को दिखाई देना चाहिए।
class ProgressWorker(
context: Context,
params: WorkerParameters
) : CoroutineWorker(context, params) {
override suspend fun doWork(): Result {
val total = 100
for (i in 1..total) {
setProgress(
workDataOf("progress" to i)
)
}
return Result.success()
}
}
WorkManager InputData और OutputData के माध्यम से Workers के बीच डेटा स्थानांतरण का समर्थन करता है। InputData Data.Builder के माध्यम से WorkRequest निर्माण के दौरान बनाया जाता है और inputData के माध्यम से Worker को पास किया जाता है। निष्पादन के बाद, Worker workDataOf या Data.Builder के माध्यम से OutputData बनाता है और Result.success(outputData) के साथ लौटाता है। श्रृंखला में अगला Worker पिछले का outputData अपने inputData के रूप में प्राप्त करता है। डेटा मूल प्रकारों के समर्थन के साथ कुंजी-मूल्य प्रारूप में संग्रहीत किया जाता है: String, Int, Long, Boolean, Double। अधिकतम Data आकार 10 KB है।
व्यवहार में, कई प्रोजेक्ट WorkManager का उपयोग एकमात्र बैकग्राउंड कार्य शेड्यूलर के रूप में करते हैं। Google सभी मौजूदा JobService को WorkManager में माइग्रेट करने की सलाह देता है, विशेष रूप से Android 4.4 (API 19) और उससे नीचे का समर्थन करने वाले ऐप्स में, जहाँ JobScheduler उपलब्ध नहीं है और WorkManager AlarmManager और BroadcastReceiver के माध्यम से एक बैकअप तंत्र का उपयोग करता है। परीक्षण के लिए, WorkManager TestListenableWorkerBuilder और TestWorkerBuilder प्रदान करता है, जो वास्तविक शेड्यूलर के बिना JUnit परीक्षणों में Workers का परीक्षण करने की अनुमति देता है।
WorkManager का परीक्षण करने के लिए, AndroidX Test से TestListenableWorkerBuilder का उपयोग करें, जो Workers को एक पृथक वातावरण में चलाने और लौटाए गए Result को जाँचने की अनुमति देता है। लाइब्रेरी वास्तविक शेड्यूलर के बिना यूनिट परीक्षण के लिए पूर्ण JUnit और Robolectric समर्थन प्रदान करती है। कुल मिलाकर, WorkManager 80% कार्यों के लिए उपयुक्त है जहाँ पहले Service या JobScheduler का उपयोग किया जाता था।
अक्सर पूछे जाने वाले प्रश्न
हाँ, WorkManager रीबूट के बाद भी निष्पादन की गारंटी देता है। लाइब्रेरी सभी अधूरे कार्यों को Room डेटाबेस में सहेजती है और BroadcastReceiver का उपयोग करके उन्हें पुनर्स्थापित करती है जो सिस्टम बूट के बाद सक्रिय होता है।
Worker बिना coroutine या RxJava समर्थन के बैकग्राउंड थ्रेड पर चलता है। CoroutineWorker suspend फ़ंक्शन और coroutine scope के माध्यम से रद्दीकरण के समर्थन के साथ Kotlin coroutines का उपयोग करता है। RxWorker Observable और Single के साथ काम करता है, प्रतिक्रियाशील श्रृंखलाओं के लिए उपयुक्त है।
रद्द करने के लिए workManager.cancelWorkById(id) या workManager.cancelAllWorkByTag("tag") का उपयोग करें। लाइब्रेरी निर्दिष्ट नाम के साथ अद्वितीय कार्यों को रद्द करने के लिए cancelUniqueWork("name") विधि भी प्रदान करती है।
PeriodicWorkRequest के लिए न्यूनतम अंतराल 15 मिनट है। यह सीमा Google द्वारा अत्यधिक बैटरी खपत को रोकने के लिए निर्धारित की गई है। यदि कार्य को अधिक बार चलाने की आवश्यकता है, तो Foreground Service या टाइमर के साथ Handler का उपयोग करें।
हाँ, WorkManager API 14+ का समर्थन करता है। JobScheduler के बिना डिवाइसों पर (API 21 से नीचे), लाइब्रेरी कार्य शेड्यूलिंग के लिए AlarmManager और BroadcastReceiver के संयोजन का उपयोग करती है। यह WorkManager को बैकग्राउंड कार्यों के लिए एक सार्वभौमिक समाधान बनाता है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें