Background Task: मुख्य अवधारणाएँ, कार्यों का पंजीकरण और पृष्ठभूमि में निष्पादन

लेखक: IT Sectr प्रकाशित: 2026-03-27 पढ़ने का समय: 10 मिनट

Background Task एक iOS तंत्र है जो एप्लिकेशन को पृष्ठभूमि में जाने के बाद संचालन पूरा करने की अनुमति देता है। सिस्टम कार्य को निष्पादित करने के लिए सीमित समय (30 सेकंड तक) आवंटित करता है, जिसके बाद एप्लिकेशन को जबरन निलंबित कर दिया जाता है। Apple, 2026 के अनुसार, पृष्ठभूमि कार्य को सही ढंग से पूरा करने के लिए समाप्ति हैंडलर का उपयोग अनिवार्य आवश्यकता है।

मुख्य बिंदु

  • Background Task — एप्लिकेशन के पृष्ठभूमि में जाने पर संचालन पूरा करने के लिए iOS तंत्र।
  • beginBackgroundTask — पृष्ठभूमि कार्य पंजीकृत करने के लिए UIApplication की मुख्य विधि।
  • समाप्ति हैंडलर — आवंटित समय समाप्त होने पर सिस्टम द्वारा बुलाया गया कोड ब्लॉक।
  • 30 सेकंड की सीमा — मानक निष्पादन समय, Background Modes के माध्यम से बढ़ाया जा सकता है।
  • UIApplication.shared.endBackgroundTask — कार्य को सही ढंग से पूरा करने के लिए अनिवार्य कॉल।

iOS में Background Task क्या है?

Background Task एक प्रोग्रामेटिक iOS तंत्र है जो एप्लिकेशन को पृष्ठभूमि में जाने के बाद निष्पादन समय बढ़ाने की अनुमति देता है। जब उपयोगकर्ता एप्लिकेशन को छोटा करता है, सिस्टम UIApplicationDelegate.applicationDidEnterBackground को कॉल करता है। यदि उस समय कोई महत्वपूर्ण संचालन चल रहा है (डेटा सहेजना, अनुरोध भेजना), तो एप्लिकेशन beginBackgroundTask के माध्यम से अतिरिक्त समय का अनुरोध कर सकता है।

Background Tasks की आवश्यकता क्यों

Background Task का उपयोग किए बिना, एप्लिकेशन पृष्ठभूमि में जाने के 3–5 सेकंड के भीतर जबरन निलंबित कर दिया जाता है। सभी अधूरे संचालन बाधित हो जाते हैं: डेटा सहेजा नहीं जाता, नेटवर्क अनुरोध रद्द हो जाते हैं, स्थितियाँ खो जाती हैं। Background Task एप्लिकेशन को इन संचालनों को सही ढंग से पूरा करने के लिए 30 सेकंड तक का समय देता है।

  • स्थिति सहेजना — CoreData, UserDefaults या फ़ाइल सिस्टम में डेटा लिखना।
  • नेटवर्क अनुरोध पूरा करना — सर्वर प्रतिक्रिया की प्रतीक्षा करना और परिणाम संसाधित करना।
  • विश्लेषण भेजना — निलंबन से पहले विश्लेषण सर्वर पर घटनाएँ भेजना।
  • संसाधन सफाई — फ़ाइल डिस्क्रिप्टर बंद करना, मेमोरी मुक्त करना।
  • कैशिंग — अगले लॉन्च पर पुनर्स्थापना के लिए मध्यवर्ती परिणाम लिखना।

इतिहास और विकास

beginBackgroundTask iOS 4.0 में दिखाई दिया — मल्टीटास्किंग का समर्थन करने वाला पहला रिलीज़। iOS 4 से पहले, होम बटन दबाने पर एप्लिकेशन पूरी तरह से समाप्त हो जाता था। iOS 7 ने Background Fetch और URLSession पृष्ठभूमि कॉन्फ़िगरेशन पेश किया। iOS 13 से शुरू करके, Apple नए प्रोजेक्ट्स के लिए BGTaskScheduler की सिफारिश करता है, लेकिन beginBackgroundTask अल्पकालिक संचालनों के लिए प्रासंगिक बना हुआ है।

beginBackgroundTask कैसे काम करता है: जीवनचक्र

beginBackgroundTask UIApplication की एक विधि है जो कार्य को पंजीकृत करती है और एक अद्वितीय UIBackgroundTaskIdentifier लौटाती है। सिस्टम पृष्ठभूमि निष्पादन टाइमर बढ़ाता है। समय समाप्त होने पर समाप्ति हैंडलर बुलाया जाता है, जिसके बाद एप्लिकेशन को कार्य को सही ढंग से पूरा करने के लिए endBackgroundTask(identifier:) कॉल करना होगा।

चरण-दर-चरण निष्पादन प्रक्रिया

चरण 1 — एप्लिकेशन didEnterBackground सूचना प्राप्त करता है। चरण 2 — beginBackgroundTask(expirationHandler:) बुलाया जाता है। चरण 3 — महत्वपूर्ण संचालन (सहेजना, नेटवर्क अनुरोध) निष्पादित किया जाता है। चरण 4 — पूरा होने पर, endBackgroundTask(identifier:) बुलाया जाता है। यदि संचालन 30 सेकंड के भीतर पूरा नहीं होता — सिस्टम समाप्ति हैंडलर को बुलाता है, और एप्लिकेशन को तुरंत कार्य समाप्त करना होगा।

swift
var backgroundTaskID: UIBackgroundTaskIdentifier = .invalid

func startBackgroundTask() {
    backgroundTaskID = UIApplication.shared.beginBackgroundTask {
        // समाप्ति हैंडलर
        UIApplication.shared.endBackgroundTask(backgroundTaskID)
        backgroundTaskID = .invalid
    }
}

func finishBackgroundTask() {
    UIApplication.shared.endBackgroundTask(backgroundTaskID)
    backgroundTaskID = .invalid
}

UIApplication.shared.backgroundTimeRemaining

backgroundTimeRemaining प्रॉपर्टी पृष्ठभूमि कार्य के जबरन समाप्त होने से पहले शेष सेकंडों की संख्या लौटाती है। मान वास्तविक समय में घटता है। यदि एप्लिकेशन पृष्ठभूमि में नहीं है — यह DBL_MAX लौटाता है। व्यवहार को अनुकूलित करने के लिए इस प्रॉपर्टी का उपयोग करें: जब 5 सेकंड से कम रह जाए, तो लंबे संचालनों को बाधित करें और प्रगति सहेजें।

एकाधिक कार्य

एक एप्लिकेशन एक साथ कई Background Tasks पंजीकृत कर सकता है। प्रत्येक कार्य को अपना स्वयं का पहचानकर्ता मिलता है। कुल निष्पादन समय संचयी होता है — यदि 3 कार्य पंजीकृत हैं, तो एप्लिकेशन 90 सेकंड तक प्राप्त कर सकता है। हालाँकि, यदि संसाधन समाप्त हो जाते हैं या बैटरी सीमा पार हो जाती है तो सिस्टम एप्लिकेशन को पहले समाप्त कर सकता है।

समाप्ति हैंडलर: अनिवार्य पूर्णता प्रबंधन

समाप्ति हैंडलर कोड का एक ब्लॉक है जिसे सिस्टम पृष्ठभूमि कार्य के लिए आवंटित समय समाप्त होने पर बुलाता है। समाप्ति हैंडलर का होना Apple की अनिवार्य आवश्यकता है। इसके बिना, एप्लिकेशन को सिस्टम द्वारा जबरन समाप्त किया जा सकता है और डेटा खो सकता है।

समाप्ति हैंडलर में क्या होना चाहिए

समाप्ति हैंडलर को एप्लिकेशन की स्थिति को सहेजने के लिए न्यूनतम कार्रवाई करनी चाहिए: वर्तमान डेटा को स्थायी भंडारण में सहेजें, संबंधित पहचानकर्ता के साथ endBackgroundTask को कॉल करें, और पहचानकर्ता को .invalid पर सेट करें। समाप्ति हैंडलर के अंदर नए लंबे संचालन शुरू करना निषिद्ध है — निष्पादन समय 1–2 सेकंड तक सीमित है।

swift
func handleExpiration() {
    // निष्पादन प्रगति सहेजा जा रहा है
    saveProgressToUserDefaults()

    // सक्रिय नेटवर्क अनुरोध रद्द किए जा रहे हैं
    currentTask?.cancel()

    // Background Task समाप्त किया जा रहा है
    UIApplication.shared.endBackgroundTask(backgroundTaskID)
    backgroundTaskID = .invalid
}

// समाप्ति हैंडलर के साथ पंजीकरण
backgroundTaskID = UIApplication.shared.beginBackgroundTask(
    withName: "SaveDocument",
    expirationHandler: handleExpiration
)

समाप्ति हैंडलर के साथ सामान्य त्रुटियाँ

सबसे आम गलती समाप्ति हैंडलर के अंदर endBackgroundTask को कॉल नहीं करना है। इस मामले में, सिस्टम कार्य को सक्रिय मानता रहता है, एप्लिकेशन निलंबित स्थिति में नहीं जाता है, और बैटरी खत्म हो जाती है। दूसरी गलती समाप्ति हैंडलर के अंदर लंबे संचालन शुरू करना है। सिस्टम उनके पूरा होने से पहले एप्लिकेशन को समाप्त कर सकता है, और डेटा खो जाएगा।

शेष समय की जाँच

समाप्ति हैंडलर में, निष्पादन समय गंभीर रूप से सीमित है — आमतौर पर 1 सेकंड से कम। इसलिए, हैंडलर के अंदर आप निष्पादित नहीं कर सकते: जटिल गणनाएँ, नेटवर्क अनुरोध, CoreData में बड़ी मात्रा में डेटा लिखना। केवल परमाणु संचालन: UserDefaults में एक कुंजी लिखना, स्थिति फ़्लैग सेट करना, endBackgroundTask कॉल करना।

Swift में Background Task कोड उदाहरण

जब एप्लिकेशन पृष्ठभूमि में जाता है तब दस्तावेज़ सहेजने के लिए एक पूर्ण Background Task कार्यान्वयन देखें। उदाहरण में कार्य पंजीकरण, शेष समय की जाँच के साथ संचालन निष्पादन, और endBackgroundTask के माध्यम से सही पूर्णता शामिल है।

प्रगति के साथ दस्तावेज़ सहेजना

पृष्ठभूमि में जाने पर, एप्लिकेशन एक बड़े दस्तावेज़ को सहेजना शुरू करता है। Background Task संचालन के लिए 30 सेकंड तक का समय प्रदान करता है। यदि समय समाप्त हो जाता है — समाप्ति हैंडलर मध्यवर्ती परिणाम सहेजता है। सहेजना पूरा होने के बाद, संसाधनों को मुक्त करने के लिए endBackgroundTask बुलाया जाता है।

swift
class DocumentManager {
    private var backgroundTaskID: UIBackgroundTaskIdentifier = .invalid

    func saveDocumentInBackground(document: Document) {
        backgroundTaskID = UIApplication.shared.beginBackgroundTask {
            self.saveProgress(document)
            self.endBackgroundTask()
        }

        DispatchQueue.global().async {
            document.save()
            self.endBackgroundTask()
        }
    }

    private func endBackgroundTask() {
        UIApplication.shared.endBackgroundTask(backgroundTaskID)
        backgroundTaskID = .invalid
    }
}

सर्वर पर डेटा भेजना

पृष्ठभूमि में नेटवर्क अनुरोधों को विशेष ध्यान देने की आवश्यकता है — समाप्ति हैंडलर प्रतिक्रिया प्राप्त करने से पहले अनुरोध को बाधित कर सकता है। URLSession को dataTask के साथ उपयोग करें और भेजने से पहले backgroundTimeRemaining की जाँच करें। यदि 5 सेकंड से कम रह गए हैं — अगली एप्लिकेशन जागृति तक भेजना स्थगित करें।

swift
func sendCriticalData(data: Data) {
    backgroundTaskID = UIApplication.shared.beginBackgroundTask {
        // पुनः भेजने के लिए डेटा सहेजा जा रहा है
        saveForRetry(data)
        self.endBackgroundTask()
    }

    let task = URLSession.shared.dataTask(with: request) { _, _, error in
        if error != nil {
            saveForRetry(data)
        }
        self.endBackgroundTask()
    }
    task.resume()
}

शेष समय की निगरानी

लंबे संचालनों के लिए, UIApplication.shared.backgroundTimeRemaining की निगरानी करें। यदि मान एक सीमा (10 सेकंड) से नीचे गिर जाता है, तो वर्तमान संचालन को बाधित करें और मध्यवर्ती परिणाम सहेजना शुरू करें। यह समाप्ति हैंडलर के जबरन बुलाए जाने से पहले सही पूर्णता की अनुमति देता है।

Background Task उपयोग के सर्वोत्तम अभ्यास

Background Task एक शक्तिशाली तंत्र है, लेकिन इसका अनुचित उपयोग बैटरी और प्रदर्शन समस्याओं का कारण बनता है। Apple की सिफारिशों और समुदाय की सिद्ध प्रथाओं का पालन करने से सामान्य गलतियों से बचने और स्थिर एप्लिकेशन संचालन सुनिश्चित करने में मदद मिलेगी।

निष्पादन समय कम करें

Background Task को जितनी जल्दी हो सके पूरा करें। पृष्ठभूमि निष्पादन का प्रत्येक सेकंड बैटरी पावर खत्म करता है। इष्टतम समय — 5 सेकंड से कम। यदि संचालन अधिक समय लेता है — BGTaskScheduler या Background Modes का उपयोग करने पर विचार करें। वास्तविक आवश्यकता के बिना beginBackgroundTask कॉल के माध्यम से कार्य को कृत्रिम रूप से न बढ़ाएँ।

पहचानकर्ताओं का सही उपयोग

UIBackgroundTaskIdentifier को क्लास या स्ट्रक्ट प्रॉपर्टी के रूप में संग्रहीत करें। इसे कभी भी वैश्विक चर के रूप में पास न करें — इससे एकाधिक कार्यों के साथ विरोध होता है। दोहरी पूर्णता को रोकने के लिए endBackgroundTask कॉल करने के बाद पहचानकर्ता को .invalid पर सेट करें।

Background Task परीक्षण

Xcode सिम्युलेटर में, होम बटन (Command + Shift + H) के माध्यम से एप्लिकेशन को पृष्ठभूमि में स्विच करें। पृष्ठभूमि जागृति के परीक्षण के लिए Debug — Simulate Background Fetch का उपयोग करें। समय समाप्ति का अनुकरण करने के लिए, एनवायरनमेंट वेरिएबल BACKGROUND_TASK_SIMULATE_EXPIRATION = YES सेट करें — समाप्ति हैंडलर 5 सेकंड के भीतर बुलाया जाएगा।

swift
// संचालन शुरू करने से पहले शेष समय की जाँच
let remaining = UIApplication.shared.backgroundTimeRemaining
guard remaining > 10.0 else {
    // पर्याप्त समय नहीं — कार्य स्थगित करें
    scheduleForNextLaunch()
    return
}

// समय नियंत्रण के साथ संचालन निष्पादित करना
backgroundTaskID = UIApplication.shared.beginBackgroundTask {
    saveProgress()
    self.endBackgroundTask()
}

रीटेन साइकिल से बचें

समाप्ति हैंडलर self को कैप्चर करता है — यह रीटेन साइकिल बना सकता है यदि backgroundTaskID उसी ऑब्जेक्ट की प्रॉपर्टी के रूप में संग्रहीत है। क्लोजर में [weak self] का उपयोग करें या पहचानकर्ता को अलग से संग्रहीत करें। रीटेन साइकिल मेमोरी लीक का कारण बनती है — ऑब्जेक्ट एप्लिकेशन समाप्त होने तक मुक्त नहीं होगा।

Background Task बनाम BGTaskScheduler: दृष्टिकोण तुलना

iOS 13 के रिलीज़ के साथ, Apple ने BGTaskScheduler पेश किया — पुराने Background Task API का एक आधुनिक प्रतिस्थापन। दोनों तंत्र समान कार्यों को हल करते हैं, लेकिन BGTaskScheduler अधिक नियंत्रण और लचीलापन प्रदान करता है। अंतरों को समझने से किसी विशिष्ट परिदृश्य के लिए सही उपकरण चुनने में मदद मिलेगी।

विशेषताBackground TaskBGTaskScheduler
iOS संस्करण4.0+13.0+
अधिकतम समय30 सेकंड30 से / 10 मिनट (processing)
आरंभdidEnterBackgroundशेड्यूलिंग + सिस्टम
निष्पादन गारंटीकेवल पृष्ठभूमि में जाने परसिस्टम के लिए सुविधाजनक किसी भी समय
समाप्ति हैंडलरहाँ, अनिवार्यहाँ, task.expirationHandler के माध्यम से
इंटरनेटप्रारंभ में आवश्यकrequiresNetworkConnectivity के माध्यम से उपलब्ध
चार्जिंगआवश्यक नहींprocessing के लिए वैकल्पिक

Background Task का उपयोग कब करें

beginBackgroundTask अल्पकालिक संचालनों के लिए उपयुक्त है जिन्हें पृष्ठभूमि में जाने पर तुरंत निष्पादित करने की आवश्यकता होती है: स्थिति सहेजना, नेटवर्क अनुरोध पूरा करना, डेटा कैश करना। API सरल है और इसमें Info.plist कॉन्फ़िगरेशन या पहचानकर्ता पंजीकरण की आवश्यकता नहीं है। उन संचालनों के लिए आदर्श जो 10 सेकंड से कम समय लेते हैं।

BGTaskScheduler का उपयोग कब करें

BGTaskScheduler उन कार्यों के लिए उपयुक्त है जो किसी भी सुविधाजनक समय पर निष्पादित किए जा सकते हैं: आवधिक सिंक्रनाइज़ेशन, कैश सफाई, विजेट अपडेट। सिस्टम स्वयं उपयोगकर्ता व्यवहार और बैटरी स्थिति को ध्यान में रखते हुए इष्टतम समय का चयन करता है। लंबे संचालनों (10 मिनट तक) के लिए, BGProcessingTask का उपयोग करें।

संयुक्त उपयोग

दोनों API का उपयोग एक ही एप्लिकेशन में किया जा सकता है। Background Task — पृष्ठभूमि में जाने पर तत्काल संचालनों के लिए (ड्राफ्ट सहेजना)। BGTaskScheduler — निर्धारित अपडेट के लिए (हर 6 घंटे में सिंक्रनाइज़ेशन)। जिम्मेदारियों का पृथक्करण डेटा के सही संरक्षण और ऊर्जा-कुशल पृष्ठभूमि रखरखाव सुनिश्चित करता है।

अक्सर पूछे जाने वाले प्रश्न

क्या didEnterBackground के बाहर beginBackgroundTask कॉल किया जा सकता है?

हाँ, beginBackgroundTask को एप्लिकेशन निष्पादन के किसी भी बिंदु पर कॉल किया जा सकता है। हालाँकि, सिस्टम समय आवंटन पृष्ठभूमि में जाने के बाद ही शुरू होगा। यदि एप्लिकेशन अग्रभूमि में है, तो beginBackgroundTask कॉल करने का कोई प्रभाव नहीं पड़ता — backgroundTimeRemaining DBL_MAX लौटाता है, और कार्य पृष्ठभूमि में जाने पर सक्रिय हो जाएगा।

यदि endBackgroundTask कॉल नहीं किया जाता तो क्या होता है?

यदि endBackgroundTask कॉल नहीं किया जाता है, तो सिस्टम एप्लिकेशन को पृष्ठभूमि में सक्रिय मानता रहता है। 30 सेकंड के बाद, समाप्ति हैंडलर बुलाया जाएगा, लेकिन यदि उसमें भी endBackgroundTask नहीं है — एप्लिकेशन मेमोरी में रहता है, बैटरी खत्म करता है। iOS 13+ में, सिस्टम ऐसे एप्लिकेशन को 3 मिनट के बाद जबरन समाप्त कर देता है।

Background Task को 30 सेकंड से अधिक कैसे बढ़ाया जाए?

मानक समय 30 सेकंड है। इसे केवल Background Modes: ऑडियो (प्लेबैक), स्थान (जियोलोकेशन), ब्लूटूथ (BLE) के माध्यम से बढ़ाया जा सकता है। या BGProcessingTask (iOS 13+) के माध्यम से — चार्जिंग और Wi-Fi के साथ 10 मिनट तक। beginBackgroundTask स्वयं सीमा बढ़ाने का कोई तरीका प्रदान नहीं करता है।

क्या Background Task iPad पर काम करता है?

हाँ, iPadOS iOS के समान सीमाओं के साथ beginBackgroundTask का पूर्ण समर्थन करता है। Stage Manager वाले iPad पर, एप्लिकेशन अधिक समय तक मेमोरी में रह सकता है — सिस्टम बड़ी RAM के कारण एप्लिकेशन को कम बार निलंबित करता है। लेकिन पृष्ठभूमि कार्य की 30 सेकंड की सीमा बनी रहती है।

वास्तविक डिवाइस पर Background Task को कैसे डीबग करें?

डिवाइस को Xcode से कनेक्ट करें, एप्लिकेशन लॉन्च करें, इसे छोटा करें — कंसोल में सिस्टम लॉग दिखाई देंगे। विस्तृत लॉग एकत्र करने के लिए sysdiagnose का उपयोग करें: डिवाइस से sysdiagnose को बलपूर्वक ट्रिगर करें (वॉल्यूम ऊपर + वॉल्यूम नीचे + पावर)। Xcode डीबग नेविगेटर में, पृष्ठभूमि कार्य गतिविधि की निगरानी करें।

सारांश

  • Background Task — iOS 4.0 से उपलब्ध, पृष्ठभूमि में जाने के बाद संचालन पूरा करने के लिए iOS तंत्र।
  • beginBackgroundTask — UIApplication विधि जो कार्य पंजीकृत करती है और उसके पूरा होने के लिए पहचानकर्ता लौटाती है।
  • समाप्ति हैंडलर — कोड का अनिवार्य ब्लॉक जो 30 सेकंड की सीमा समाप्त होने पर सिस्टम द्वारा बुलाया जाता है।
  • endBackgroundTask — कार्य को सही ढंग से पूरा करने के लिए अनिवार्य कॉल; इसके बिना एप्लिकेशन मेमोरी में रहता है।
  • BGTaskScheduler — शेड्यूलिंग, दो कार्य प्रकारों और निष्पादन शर्तों के साथ आधुनिक विकल्प (iOS 13+).
  • backgroundTimeRemaining — शेष समय की जाँच और कार्य व्यवहार को अनुकूलित करने के लिए प्रॉपर्टी।
  • तत्काल अल्पकालिक संचालनों के लिए Background Task और नए प्रोजेक्ट्स में निर्धारित पृष्ठभूमि अपडेट के लिए BGTaskScheduler का उपयोग करें।

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें