2013-05-09 10 views
8

मैं एक गतिविधि में एक नया धागा बनाता हूं और धागे को बाधित करने के लिए मैं ऑन पॉज़() पर भरोसा करता हूं। अगर मेरा ऐप दुर्घटनाग्रस्त हो जाता है, या गतिविधि किसी भी तरह से अस्तित्व में रहती है, तो मैं धागा को मारना चाहता हूं।चालू है जब कोई गतिविधि नहीं चल रही है?

गतिविधि/Fragment.onPause() गतिविधि होने पर गारंटी दी जाती है जब कोई गतिविधि नहीं चल रही है? यदि नहीं, तो मैं कैसे गारंटी कर सकता हूं कि सवाल में धागा मारा गया है?

उत्तर

11

मेरे ऐप

onPause() यहां नहीं बुलाया जाता है दुर्घटनाओं, लेकिन यह आपको परेशान नहीं करना चाहिए के रूप में अपने पूरे एप्लिकेशन प्रक्रिया अस्तित्व समाप्त हो जाता है, तो आपके द्वारा बनाए गए सभी धागे (यूआई या अन्यथा) के समावेशी ।

गतिविधि किसी भी तरह, अस्तित्व के लिए जब भी अपनी गतिविधि अग्रभूमि है, जो हर कल्पनीय जिस तरह अपनी गतिविधि को बंद कर दिया जा सकता है में किया जाता है से पृष्ठभूमि में ले जाया जाता

onPause() बुलाया जाएगा रहता है सिवाय आपके ऐप को दुर्घटनाग्रस्त करने के लिए। हालांकि, जैसा कि मैंने ऊपर बताया है, ऐप क्रैशिंग डिफ़ॉल्ट रूप से आपके धागे को मार देगा।

onPause() अनिवार्य रूप से कॉल किया जाता है जब भी आपकी गतिविधि अग्रभूमि में नहीं होती है। आपकी गतिविधि अभी भी जिंदा हो सकती है और onPause() के बाद स्मृति में कहा जा सकता है, लेकिन ऐसा कोई परिदृश्य नहीं है जिसके बारे में मैं सोच सकता हूं कि आपकी गतिविधि जिंदा है और बिना पृष्ठभूमि के onPause() को पृष्ठभूमि में रखा जा रहा है।

+0

स्मृति कम होने पर क्या होता है और उस स्थिति में मौजूदा चल रहे संचालन के लिए सिस्टम को स्मृति पुनर्प्राप्त करने की आवश्यकता होती है रोके गए गतिविधियां नष्ट हो जाती हैं (प्राथमिकता के आधार पर)? – Raghunandan

4

हां, onPause() तब कॉल किया जाएगा जब कोई गतिविधि नहीं चल रही है। मान लें कि एक गतिविधि बंद है तो घटनाओं का अनुक्रम onPause() ->onStop() ->onDestroy() होगा। भले ही आपकी गतिविधि पृष्ठभूमि में फिसल जाती है जब कोई अन्य गतिविधि शुरू होती है या जब स्क्रीन बंद हो जाती है, तो onPause() को हमेशा दो अन्य तरीकों से नहीं बुलाया जाता है। तो अगर गतिविधि समाप्त हो जाती है, onPause() बुलाया जाएगा और आपका धागा मारा जाएगा।

लेकिन जब आपका ऐप क्रैश हो जाता है, आपकी पूरी गतिविधि के साथ, यहां तक ​​कि आपके द्वारा शुरू किया गया थ्रेड भी इसे खत्म करके एंड्रॉइड द्वारा ख्याल रखेगा।

1

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

जब आप गतिविधि में एक संवाद प्रदर्शित करते हैं तो रुकावट और संवाद में गतिविधि प्रदर्शित होती है, बैक बटन संवाद के क्लिक पर खारिज कर दिया जाता है और गतिविधि फिर से शुरू होती है (अग्रभूमि)।

जब गतिविधि नहीं चल रही है तो यह पृष्ठभूमि में है इसलिए इसे रोक दिया गया है। मैं राघव सूद से सहमत हूं कि ऐप दुर्घटनाग्रस्त होने पर क्या होता है।

आप आम तौर पर करने के लिए onPause() कॉलबैक का उपयोग करना चाहिए:

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

नोट:

एकाधिक कार्य पृष्ठभूमि में एक ही बार में आयोजित किया जा सकता। हालांकि, यदि उपयोगकर्ता एक ही समय में कई पृष्ठभूमि कार्यों को चला रहा है, तो सिस्टम स्मृति को पुनर्प्राप्त करने के लिए पृष्ठभूमि गतिविधियों को नष्ट करना शुरू कर सकता है, जिससे गतिविधि के राज्य खो जाएंगे।

संबंधित मुद्दे