BGTaskScheduler Apple का एक फ्रेमवर्क है जो iOS 13 और उसके बाद के एप्लिकेशन में बैकग्राउंड कार्यों को शेड्यूल और निष्पादित करने के लिए है। इसने पुराने Background Fetch और performFetch को बदल दिया, बैकग्राउंड ऑपरेशन के लिए एक एकीकृत API प्रदान किया। Apple Developer Documentation, 2026 के अनुसार, फ्रेमवर्क में दो प्रकार के कार्य शामिल हैं: लंबे ऑपरेशन के लिए BGProcessingTask और छोटे कंटेंट अपडेट के लिए BGAppRefreshTask।
मुख्य बातें
BGTaskScheduler Apple का एक सिस्टम फ्रेमवर्क है जो iOS 13 में पेश किया गया था और बैकग्राउंड कार्यों के निष्पादन को केंद्रीय रूप से प्रबंधित करता है। इसके आने से पहले, डेवलपर्स UIApplication backgroundTasks, performFetch और appDelegate में इवेंट हैंडलिंग का उपयोग करते थे, जिससे कोड खंडित हो जाता था और अप्रत्याशित व्यवहार होता था।
फ्रेमवर्क विलंबित शेड्यूलिंग सिद्धांत पर काम करता है: एप्लिकेशन अद्वितीय आइडेंटिफ़ायर के साथ कार्यों को पंजीकृत करता है, और iOS स्वयं उन्हें निष्पादित करने का इष्टतम क्षण निर्धारित करता है। सिस्टम बैटरी स्तर, उपयोगकर्ता गतिविधि, नेटवर्क स्थिति और अन्य कारकों को ध्यान में रखता है।
मुख्य क्षमताओं में छोटे और लंबे दोनों बैकग्राउंड ऑपरेशन के साथ काम करना शामिल है। Android में AlarmManager के विपरीत, BGTaskScheduler सटीक निष्पादन समय की गारंटी नहीं देता — सिस्टम प्रतिकूल परिस्थितियों में कार्य में देरी करने का अधिकार सुरक्षित रखता है।
BGTaskScheduler हैंडलर-आधारित आर्किटेक्चर का उपयोग करता है। एप्लिकेशन प्रत्येक कार्य प्रकार के लिए एक हैंडलर पंजीकृत करता है, और सिस्टम उसे कॉल करता है जब सही समय आता है। फ्रेमवर्क स्वयं कार्य को सीधे निष्पादित नहीं करता — यह केवल एप्लिकेशन को सूचित करता है कि इसे चलाने का समय आ गया है।
पंजीकरण Info.plist में BGTaskSchedulerPermittedIdentifiers ऐरे के माध्यम से कार्य आइडेंटिफ़ायर घोषित करके शुरू होता है। फिर एप्लिकेशन कोड में, registerHandler(forTaskWithIdentifier:) विधि को हैंडलर क्लोजर के साथ कॉल किया जाता है।
import BackgroundTasks
let taskID = "com.example.app.refresh"
BGTaskScheduler.shared.registerHandler(
forTaskWithIdentifier: taskID,
using: DispatchQueue.global()
) { task in
task.expirationHandler = {
// जबरन समाप्ति पर कॉल किया जाता है
}
processBackgroundTask(task as! BGAppRefreshTask)
}
पंजीकरण के बाद, एप्लिकेशन को submitTaskRequest के माध्यम से स्पष्ट रूप से कार्य निष्पादन का अनुरोध करना होता है। अनुरोध में कार्य आइडेंटिफ़ायर और सबसे पहली संभावित प्रारंभ तिथि शामिल होती है। सिस्टम अनुरोध को सहेजता है और जब परिस्थितियाँ उपयुक्त समझता है तब उसे संसाधित करता है।
let request = BGAppRefreshTaskRequest(
identifier: taskID
)
request.earliestBeginDate = Date(timeIntervalSinceNow: 3600)
do {
try BGTaskScheduler.shared.submit(request)
} catch {
print("शेड्यूलिंग त्रुटि: \(error)")
}
BGTaskScheduler दो मुख्य प्रकार के कार्य प्रदान करता है, प्रत्येक अपने उपयोग के मामले के लिए डिज़ाइन किया गया है। सही प्रकार चुनना सीधे सिस्टम द्वारा सफल कार्य निष्पादन की संभावना को प्रभावित करता है।
BGAppRefreshTask छोटे बैकग्राउंड कंटेंट अपडेट के लिए डिज़ाइन किया गया है: नया डेटा लोड करना, सर्वर के साथ सिंक करना, विजेट अपडेट करना। निष्पादन समय 30 सेकंड तक सीमित है, जिसके बाद सिस्टम कार्य को जबरन समाप्त कर देता है। इस प्रकार का कार्य BGProcessingTask से अधिक बार चलता है और इसकी उच्च प्राथमिकता होती है।
BGProcessingTask लंबे ऑपरेशन के लिए डिज़ाइन किया गया है: मीडिया फ़ाइलों को संसाधित करना, Core Data को इंडेक्स करना, बैकअप बनाना। कार्य कई मिनट तक चल सकता है, लेकिन सिस्टम इसे कम बार और केवल अनुकूल परिस्थितियों में शुरू करता है — पावर से कनेक्टेड, स्थिर Wi-Fi और डिवाइस पर कम लोड।
| पैरामीटर | BGAppRefreshTask | BGProcessingTask |
|---|---|---|
| समय सीमा | 30 सेकंड | कई मिनट |
| प्रारंभ आवृत्ति | उच्च | निम्न |
| शर्तें | कोई भी | पावर + Wi-Fi |
| पावर आवश्यक | नहीं | अनुशंसित |
| उदाहरण | फ़ीड अपडेट | वीडियो प्रोसेसिंग |
सही पंजीकरण BGTaskScheduler के काम करने के लिए एक अनिवार्य शर्त है। यदि कोई कार्य Info.plist में पंजीकृत नहीं है, तो सिस्टम उसे निष्पादित करने के किसी भी अनुरोध को अनदेखा कर देगा।
Info.plist फ़ाइल में स्ट्रिंग आइडेंटिफ़ायर की सूची के साथ BGTaskSchedulerPermittedIdentifiers ऐरे शामिल होना चाहिए। प्रत्येक आइडेंटिफ़ायर एप्लिकेशन के भीतर अद्वितीय होना चाहिए। Apple रिवर्स डोमेन नोटेशन का उपयोग करने की सिफारिश करता है।
<key>BGTaskSchedulerPermittedIdentifiers</key>
<array>
<string>com.example.app.refresh</string>
<string>com.example.app.processing</string>
</array>
कार्य शेड्यूल करने के लिए submitTaskRequest विधि का उपयोग करें। यदि किसी कार्य की अब आवश्यकता नहीं है, तो इसे cancelTaskRequest या cancelAllTaskRequests के माध्यम से रद्द किया जा सकता है। सिस्टम एप्लिकेशन हटाए जाने या डेटा रीसेट होने पर भी स्वचालित रूप से कार्यों को रद्द करता है।
BGTaskScheduler getPendingTaskRequests के माध्यम से शेड्यूल किए गए कार्यों की स्थिति को ट्रैक करने की क्षमता प्रदान करता है। यह विधि उनके प्रकार, आइडेंटिफ़ायर और earliestBeginDate के बारे में जानकारी के साथ सभी सक्रिय अनुरोधों की सूची लौटाती है। प्रत्येक अनुरोध के लिए, आप जाँच सकते हैं कि क्या वह पहले ही पूरा हो चुका है या रद्द कर दिया गया है, और पुनर्निर्धारण का निर्णय ले सकते हैं।
यह ध्यान रखना महत्वपूर्ण है कि सिस्टम बैकग्राउंड कार्य की सफलता के बारे में सीधा कॉलबैक प्रदान नहीं करता — हैंडलर को स्वयं कार्य गुणों के माध्यम से परिणाम की रिपोर्ट करनी चाहिए। setTaskCompleted किसी कार्य को सफलतापूर्वक पूर्ण के रूप में चिह्नित करने की अनुमति देता है, जिसके बाद सिस्टम इस प्रकार का अगला शेड्यूल किया गया कार्य शुरू कर सकता है। यदि कोई कार्य setTaskCompleted को कॉल नहीं करता है, तो सिस्टम उसे टाइमआउट या जबरन समाप्ति पर पूर्ण मानता है।
निदान के लिए, हैंडलर में OSLog का उपयोग करने और Mac पर Console.app के माध्यम से लॉग देखने की सिफारिश की जाती है। Apple बैकग्राउंड कार्य प्रदर्शन के विश्लेषण के लिए MetricKit टूल भी प्रदान करता है — यह निष्पादन समय, ऊर्जा खपत और प्रारंभ आवृत्ति पर डेटा एकत्र करता है जिसका उपयोग अनुकूलन के लिए किया जा सकता है।
// विशिष्ट कार्य रद्द करें
BGTaskScheduler.shared.cancel(taskRequestWithIdentifier: taskID)
// सभी कार्य रद्द करें
BGTaskScheduler.shared.cancelAllTaskRequests()
// शेड्यूल किए गए कार्यों की जाँच करें
BGTaskScheduler.shared.getPendingTaskRequests { requests in
print("\(requests.count) कार्य शेड्यूल किए गए")
}
BGTaskScheduler बैकग्राउंड कार्य पर सख्त सीमाएँ लगाता है। सिस्टम प्रतिकूल परिस्थितियों में कार्य को अनिश्चित काल के लिए विलंबित कर सकता है। डेवलपर्स को समझना चाहिए कि फ्रेमवर्क रीयल-टाइम कार्यों के लिए नहीं है।
मुख्य सीमाओं में शामिल हैं: सिस्टम निर्दिष्ट समय पर कार्य निष्पादन की गारंटी नहीं देता, एक साथ कार्यों की अधिकतम संख्या सीमित है, और ऊर्जा खपत सख्ती से नियंत्रित होती है। कई कार्यों को एक के बाद एक चलाने से वे मर्ज या रद्द हो सकते हैं।
निष्पादन की संभावना बढ़ाने के लिए, BGProcessingTask के लिए earliestBeginDate को 1 घंटे से पहले और BGAppRefreshTask के लिए 15 मिनट से पहले सेट न करने की सिफारिश की जाती है। expirationHandler को संभालना भी महत्वपूर्ण है — यदि कोई कार्य अपनी समय सीमा को पूरा नहीं कर सकता है, तो सिस्टम उचित समाप्ति के लिए इस हैंडलर को कॉल करता है। निरंतर बैकग्राउंड कार्य चक्र बनाए रखने के लिए हैंडलर के अंदर ही पुनर्निर्धारण किया जाना चाहिए।
एक और महत्वपूर्ण सीमा नेटवर्क अनुरोधों से संबंधित है। BGTaskScheduler कार्य निष्पादन के दौरान सक्रिय नेटवर्क कनेक्शन की गारंटी नहीं देता। एप्लिकेशन को NWPathMonitor के माध्यम से स्वतंत्र रूप से नेटवर्क उपलब्धता की जाँच करनी चाहिए और कनेक्शन न होने पर प्रसंस्करण स्थगित करना चाहिए। यह Android JobScheduler से भिन्न है, जो किसी विशिष्ट प्रकार के नेटवर्क से कनेक्ट होने पर ही कार्य को सक्रिय कर सकता है। व्यवहार में, डेवलपर्स अक्सर विश्वसनीय डेटा लोडिंग के लिए BGTaskScheduler को NSURLSession की बैकग्राउंड URL सत्रों के साथ जोड़ते हैं।
macOS Catalina से शुरू होकर, BGTaskScheduler Mac पर भी उपलब्ध है। यह Apple Silicon पर चलने वाले UIKit एप्लिकेशन के लिए क्रॉस-प्लेटफ़ॉर्म बैकग्राउंड कार्य बनाने की अनुमति देता है। watchOS पर, फ्रेमवर्क सीमित कार्यक्षमता वाला है — केवल छोटे BGAppRefreshTask कॉम्प्लिकेशन को अपडेट करने और iPhone के साथ डेटा सिंक करने के लिए उपलब्ध हैं। डेवलपर्स को बैकग्राउंड आर्किटेक्चर की योजना बनाते समय प्लेटफ़ॉर्म अंतर को ध्यान में रखना चाहिए।
Apple BGTaskScheduler को डीबग करने के लिए कई उपकरण प्रदान करता है। lldb में कमांड e -l objc -- (void)[[BGTaskScheduler sharedScheduler] _simulateLaunchForTaskWithIdentifier:@"com.example.task"] सिस्टम सीमाओं को दरकिनार करते हुए बैकग्राउंड कार्य को जबरन शुरू करता है। Xcode में Debug मेनू में Simulate Background Fetch फ़्लैग है जो एक छोटे बैकग्राउंड अपडेट का अनुकरण करता है। प्रदर्शन विश्लेषण के लिए MetricKit का उपयोग किया जाता है — यह प्रत्येक कार्य की प्रारंभ आवृत्ति, निष्पादन अवधि और ऊर्जा खपत के बारे में जानकारी एकत्र करता है। यह डेटा शेड्यूलिंग आवृत्ति को अनुकूलित करने और सही कार्य प्रकार चुनने में मदद करता है।
व्यवहार में, BGTaskScheduler विजेट डेटा अपडेट करने, iCloud सिंक, सामग्री के साथ पुश सूचनाओं को संसाधित करने और Spotlight खोज के लिए इंडेक्सिंग के लिए उपयुक्त है। यह रीयल-टाइम विश्लेषण, चैट एप्लिकेशन या किसी भी ऐसे कार्य के लिए उपयुक्त नहीं है जिसमें तत्काल निष्पादन की आवश्यकता होती है।
BGTaskScheduler के गहन अध्ययन के लिए, Apple आधिकारिक WWDC दस्तावेज़ीकरण की सिफारिश करता है: "Advances in Background Tasks" सत्र (2020) पुराने API से माइग्रेशन को कवर करता है, और "Background Tasks in Practice" (2021) में वास्तविक उपयोग के मामले शामिल हैं। Energy Efficiency Guide अनुभाग भी उपयोगी है, जो बताता है कि फ्रेमवर्क Apple की समग्र ऊर्जा-बचत रणनीति में कैसे फिट बैठता है। कोड उदाहरण GitHub पर आधिकारिक Apple Developer रिपॉजिटरी में iOS और macOS के लिए पूर्ण प्रोजेक्ट के साथ उपलब्ध हैं।
अक्सर पूछे जाने वाले प्रश्न
Background Fetch प्रति एप्लिकेशन एक बैकग्राउंड कार्य तक सीमित था और इसमें प्राथमिकता तंत्र नहीं था। BGTaskScheduler विभिन्न प्रकारों के साथ कई कार्यों का समर्थन करता है, एक एकीकृत API और स्वचालित ऊर्जा प्रबंधन प्रदान करता है।
Apple पंजीकृत आइडेंटिफ़ायर की संख्या पर कोई स्पष्ट सीमा निर्धारित नहीं करता है, लेकिन व्यवहार में 5–10 से अधिक कार्यों का उपयोग न करने की सिफारिश की जाती है। बड़ी संख्या सिस्टम संसाधनों के लिए प्रतिस्पर्धा के कारण प्रत्येक विशिष्ट कार्य के निष्पादित होने की संभावना को कम करती है।
डीबगिंग के लिए, lldb में कमांड e -l objc -- (void)[[BGTaskScheduler sharedScheduler] _simulateLaunchForTaskWithIdentifier:@"com.example.task"] का उपयोग करें। यह सिस्टम सीमाओं को दरकिनार करते हुए कार्य को जबरन शुरू करता है। Debug मेनू में Xcode Simulate Background Fetch फ़्लैग भी उपलब्ध है।
हाँ, BGTaskScheduler प्रक्रिया शुरू कर सकता है भले ही एप्लिकेशन उपयोगकर्ता द्वारा जबरन बंद कर दिया गया हो। हालांकि, सिस्टम अतिरिक्त देरी लागू कर सकता है, और सभी कार्य प्रकार इस परिदृश्य में निष्पादन की गारंटी नहीं देते।
सिस्टम expirationHandler को कॉल करता है, कार्य को संकेत देता है कि उसे समाप्त होने की आवश्यकता है। यदि एप्लिकेशन इस संकेत को अनदेखा करता है और काम करना जारी रखता है, तो iOS प्रक्रिया को जबरन समाप्त कर देता है। उसके बाद, सिस्टम एप्लिकेशन के सभी बैकग्राउंड कार्यों की प्राथमिकता कम कर सकता है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें