2012-12-05 45 views
7

applicationDidEnterBackground हमेशा एक आईओएस ऐप में applicationWillTerminate से पहले बुलाया जाता है? मुझे पता है कि applicationWillTerminate को हमेशा (मल्टीटास्किंग) नहीं कहा जाता है - लेकिन जब इसे कहा जाता है, तो applicationDidEnterBackground हमेशा कहलाता है? मैं मल्टीटास्किंग का समर्थन करने वाले ऐप के लिए applicationDidEnterBackground में पहले से ही applicationDidEnterBackground में शामिल होने पर इसे applicationWillTerminate में अनावश्यक रूप से कोड को डुप्लिकेट नहीं करना चाहता हूं।एप्लिकेशनडिड एंटरबैकग्राउंड हमेशा एप्लिकेशन से पहले बुलाया जाता है?

+0

यदि आप मल्टीटास्किंग कर रहे हैं, और ऐप पृष्ठभूमि में प्रवेश करता है, तो उपयोगकर्ता द्वारा मारे जाने से पहले इसे फिर से 'applicationDidEnterBackground' क्यों जाना चाहिए? – Larme

+0

यह मेरी समझ थी कि यदि कोई उपयोगकर्ता होम बटन को डबल-टैप करके पृष्ठभूमि में चल रहे ऐप को मारता है और लाल मिनस बटन टैप करके एप्लिकेशन को टिलटर्मिनेट नहीं कहा जाता है। अगर मैं गलत हूं तो मुझे बताएं। – SAHM

+0

@Larme शायद यह पूछने का एक अच्छा सवाल यह है कि जब आईएस एप्लिकेशन विल्ट टर्मिनेट को एक ऐप के लिए बुलाया जाता है जो मल्टीटास्किंग का समर्थन करता है .. – SAHM

उत्तर

5

आईओएस 4.0 में और बाद में applicationDidEnterBackground को applicationWillTerminate के बजाय बुलाया जाता है, इसलिए आपको उन दोनों को कॉल करने की आवश्यकता नहीं है।

चर्चा

आईओएस 4.0 में और बाद में, इस विधि applicationWillTerminate के बजाय कहा जाता है:: यहाँ एप्पल डॉक्स का हिस्सा है विधि है जब उपयोगकर्ता एक आवेदन पृष्ठभूमि निष्पादन का समर्थन करता है कि इस्तीफा । आपको इस विधि का उपयोग साझा संसाधनों को छोड़ना, उपयोगकर्ता डेटा को सहेजना, टाइमर को अमान्य करना, और स्टोर को अपने आवेदन को पर चालू करने के लिए पर्याप्त स्थिति स्थिति जानकारी को बाद में समाप्त कर दिया जाना चाहिए। आपको अपने एप्लिकेशन के उपयोगकर्ता इंटरफ़ेस में अपडेट अक्षम करना चाहिए और कुछ प्रकार के साझा सिस्टम संसाधनों (जैसे उपयोगकर्ता के संपर्क डेटाबेस) का उपयोग करने से बचें। यह भी जरूरी है कि आप पृष्ठभूमि में ओपनजीएल ES का उपयोग करने से बचें।

इस विधि के आपके कार्यान्वयन में लगभग पांच सेकंड कोई कार्य करता है और वापस लौटाता है। यदि आपको किसी भी अंतिम कार्य करने के लिए अतिरिक्त समय की आवश्यकता है, तो आप सिस्टम से प्रारंभ निष्पादन समय का अनुरोध कर सकते हैं StartBackgroundTaskWithExpirationHandler:। अभ्यास में, आपको एप्लिकेशनडिडइंटरबैकग्राउंड से वापस जाना चाहिए: जितनी जल्दी हो सके। यदि विधि रन से पहले वापस नहीं आती है तो आपका एप्लिकेशन समाप्त हो जाता है और स्मृति से शुद्ध हो जाता है।

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

आवेदन भी एक ही समय में यह इस प्रणाली को बुलाती है संक्रमण के लिए प्रतिक्रिया करने के लिए रुचि रखते वस्तुओं एक मौका देने का चारों ओर एक UIApplicationDidEnterBackgroundNotification अधिसूचना पोस्ट करता है।

पृष्ठभूमि में गहन रूप से संक्रमण कैसे करें, और पर पृष्ठभूमि कार्यों को प्रारंभ करने के तरीके के बारे में जानकारी के लिए, आईओएस ऐप प्रोग्रामिंग गाइड देखें।

आशा है कि यह आपके लिए इस मुद्दे को स्पष्ट करने में मदद करेगा। एड्रियन

डेवलपर अनुभाग पर उपलब्ध तकनीकी नोट का लिंक यहां दिया गया है। यह नेटवर्किंग और मल्टीटास्किंग से निपट रहा है। इस दस्तावेज़ में उपयोग की जाने वाली वास्तविक विधि केवल applicationDidEnterBackground से संबंधित है और आईओएस 5 के बाद से उनके पास वॉचडॉग नामक एक सिस्टम है जो नेटवर्क को स्वचालित रूप से अनुत्तरदायी होने पर ऐप को समाप्त करता है। इसलिए वास्तव में applicationWillTerminate पर कॉल करने की आवश्यकता नहीं है और ऐप को समाप्त होने से पहले अपने ऐप को अपना कार्य पूरा करने की अनुमति देने के लिए कोड निष्पादित करने का प्रयास करें। ऐप पृष्ठभूमि में प्रवेश करेगा और आखिरी कार्य पूरा होने तक अपना कार्य जारी रखेगा। मुझे आशा है कि यह समझ में आता है, लेकिन यहां लिंक है। कृपया वॉचडॉग सेक्शन पढ़ें। https://developer.apple.com/library/ios/#technotes/tn2277/_index.html#//apple_ref/doc/uid/DTS40010841

उम्मीद है कि इससे मदद मिलती है। :)

+0

धन्यवाद, मैं समझ गया था, और मेरे पास आवेदन में सभी आवश्यक कोड है DidEnterBackground। मैं बस यह पता लगाने की कोशिश कर रहा हूं कि कौन सा कोड एप्लिकेशन में शामिल होगा और टिल आउट करना होगा। – SAHM

+0

मैं वास्तव में आवेदन DidEnterBackground से बाहर समय पर टिप्पणी की सराहना करता हूं। – SAHM

+0

मैं एप्लिकेशन में कुछ भी कॉल नहीं करता हूं अब विधि को समाप्त कर देगा। मैं इसे डिफ़ॉल्ट रूप से छोड़ देता हूं जो आवश्यक दृश्य बनाते समय आता है। आईओएस 5 के रूप में मैं आवेदन में सभी विधियों को कॉल कर रहा हूं पृष्ठभूमि में प्रवेश किया है और यह मेरे लिए ठीक काम करता है। मैं किसी अन्य काम के बारे में नहीं जानता। –