मेरे पास कुछ लंबी चल रही प्रक्रिया है जिसे मैं पृष्ठभूमि में चला जाता हूं, भले ही मैं दौड़ना चाहता हूं। मैं एप्लिकेशन की beginBackgroundTaskWithExpirationHandler:
विधि और समाप्ति में कॉल कर रहा हूं। मैं एप्लिकेशन को endBackgroundTask
पर कॉल कर रहा हूं। यहाँ दिया गया है:startBackgroundTaskWithExpirationHandler कॉलिंग एंडबैकग्राउंड टास्क लेकिन प्रक्रिया समाप्त नहीं कर रहा
__block UIBackgroundTaskIdentifier task = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
[[UIApplication sharedApplication] endBackgroundTask:task];
task = UIBackgroundTaskInvalid;
}];
dispatch_queue_t queue = dispatch_queue_create("com.test.test1234", DISPATCH_QUEUE_SERIAL);
dispatch_async(queue, ^{
// My Task goes here
});
कुछ मामलों में, मेरी धारावाहिक कतार जो प्रणाली द्वारा प्रदान की समय के भीतर पूरा नहीं किया जा सकता प्रदर्शन करने के लिए और अधिक काम किया है। तो समाप्ति ब्लॉक निष्पादित होगा और उसमें मैं UIBackgroundTaskIdentifier
समाप्त कर रहा हूं लेकिन प्रेषण प्रक्रिया को रोक नहीं रहा हूं (मैं प्रेषण भी रद्द नहीं कर सकता)।
एप्पल के दस्तावेज़ का कहना है:
beginBackgroundTaskWithName को प्रत्येक कॉल: expirationHandler: या beginBackgroundTaskWithExpirationHandler: विधि इसी कार्य के साथ संबद्ध करने के लिए एक अद्वितीय टोकन उत्पन्न करता है। जब आपका ऐप कोई कार्य पूरा करता है, तो उसे एंडबैकग्राउंड टास्क को कॉल करना होगा: विधि को संबंधित टोकन के साथ विधि को यह बताने के लिए कि कार्य पूरा हो गया है। एंडबैकग्राउंड टास्क को कॉल करने में विफलता: पृष्ठभूमि कार्य के लिए विधि के परिणामस्वरूप आपके ऐप को समाप्त कर दिया जाएगा। यदि आपने कार्य शुरू करते समय एक समाप्ति हैंडलर प्रदान किया है, तो सिस्टम उस हैंडलर को कॉल करता है और आपको कार्य को समाप्त करने और समाप्ति से बचने का एक आखिरी मौका देता है।
तो, अगर मैं endBackgroundTask:
पर कॉल नहीं करता हूं तो मेरा ऐप समाप्त हो जाएगा, जो ठीक है।
मेरा प्रश्न है: मेरे वर्तमान कार्यान्वयन के साथ यदि मैं endBackgroundTask:
को समाप्ति में कॉल करता हूं हैंडलर ब्लॉक और मेरी प्रेषण कतार का कार्य पूरा नहीं होता है? मेरा ऐप समाप्त कर दिया जाएगा या निलंबित कर दिया जाएगा?
धन्यवाद
यदि आपने एंडबैकग्राउंड टास्क कहा है: कहीं भी आपकी कतार। यह सिर्फ आपके आवेदन को निलंबित कर आवेदन को नींद में डाल दिया। –
@ चिरागशाह तो यह मेरे ऐप को सही तरीके से मारने का कारण नहीं हो सकता है? वॉचडॉग केवल ऐप को मार देगा अगर मुझे 'एंडबैकग्राउंड टास्क' सही याद आती है? –
हाँ मैं अपने आवेदन में वही सोचता हूं, यह उत्तर के लिए –