android - एंड्रॉइड गतिविधियों को नष्ट करना, प्रक्रियाओं को मारना




android-activity (2)

क्या स्मृति स्मृति को पुनर्प्राप्त करने के लिए केवल एक या कुछ गतिविधियों को नष्ट कर सकता है?

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

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

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

यदि कोई गतिविधि रोका या रोका गया है, तो सिस्टम इसे खत्म करने के लिए या इसकी प्रक्रिया को मारने से स्मृति को गतिविधि से छोड़ सकता है। जब यह उपयोगकर्ता को फिर से प्रदर्शित किया जाता है, तो इसे पूरी तरह से पुनरारंभ किया जाना चाहिए और अपने पिछले राज्य में बहाल किया जाना चाहिए।

क्या सिस्टम मेरे आवेदन की पूरी प्रक्रिया को मार देगा? क्या सभी गतिविधियों को अच्छी तरह नष्ट कर दिया जाएगा?

गतिविधि एक व्यक्ति से संबंधित है जबकि प्रक्रिया गतिविधियों के समूह से संबंधित है। ऊपर तीसरे बिंदु को देखें, जैसा कि उल्लेख किया गया है, यह प्रक्रिया को मार देता है।

क्या होगा जब मैं पूरी तरह से मार डाला गया था जब मैं अपने आवेदन पर वापस आ गया?

यह पुनरारंभ करने के समान है। फिर तीसरा बिंदु आपको कुछ जवाब देगा जैसे When it is displayed again to the user, it must be completely restarted and restored to its previous state

here स्मृति से संबंधित सामानों के बारे में कुछ और जानकारी प्राप्त here

संपादित करें:
किसी एप्लिकेशन में सभी गतिविधियां एक ही प्रक्रिया में चलती हैं। तो जब सभी प्रक्रियाओं को मार दिया जाता है तो कोई फर्क नहीं पड़ता कि 5 या 10 मारे जाएंगे यानी फिर से शुरू किया जाएगा। पुनरारंभ करने से आपके एप्लिकेशन को शुरुआत से कोई सहेजे गए राज्यों से शुरू नहीं होगा।

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

... मेरे आवेदन के साथ क्या होगा?

  1. क्या स्मृति स्मृति को पुनर्प्राप्त करने के लिए केवल एक या कुछ गतिविधियों को नष्ट कर सकता है?
  2. क्या सिस्टम मेरे आवेदन की पूरी प्रक्रिया को मार देगा? क्या सभी गतिविधियों को अच्छी तरह नष्ट कर दिया जाएगा?
  3. क्या होगा जब मैं पूरी तरह से मार डाला गया था जब मैं अपने आवेदन पर वापस आ गया? क्या यह भिखारी से शुरू होगा (पहली शुरुआत की तरह) या क्या यह मौजूदा राज्य में गतिविधियों को पुनर्प्राप्त करने का प्रयास करेगा / यदि हां - क्या यह केवल स्टैक के शीर्ष पर या उन सभी में से एक है?

अद्यतन करें:

इस सवाल से पूछने से पहले मैंने गतिविधि जीवन चक्र को कुछ बार देखा है लेकिन इसमें मेरे सवालों के जवाब नहीं हैं। मैंने कुछ परीक्षण किए और मेरे पास कुछ जवाब हैं। डीडीएमएस में "स्टॉप प्रोसेस" परीक्षण के लिए एक सुराग था।

मैंने प्रश्न 1 के उत्तर का परीक्षण नहीं किया है, लेकिन जैसा कि गाइड कहता है:

यदि कोई गतिविधि रोका या रोका गया है, तो सिस्टम इसे खत्म करने के लिए या इसकी प्रक्रिया को मारने से स्मृति को गतिविधि से छोड़ सकता है।

ऐसा लगता है कि प्रक्रिया को मारने के बिना एक या अधिक गतिविधियों को धीरे-धीरे नष्ट कर दिया जा सकता है (ऑनस्ट्रोय विधि के साथ)। जब आप उन्हें वापस आते हैं तो आपको बस (ऑन क्रेट + बंडल) मिल जाएगा।

प्रश्न 2 उत्तर:

हाँ। आम तौर पर प्रणाली पूरी प्रक्रिया को मार देती है इसका मतलब है कि गतिविधियों और स्थैतिक क्षेत्रों समेत सभी डेटा नष्ट हो जाते हैं। यह अच्छी तरह से नहीं किया जाता है - आप अपनी किसी भी रोके गए / बंद गतिविधियों के लिए डेस्ट्राय या फाइनियलाइज () पर नहीं पहुंचेंगे। यही कारण है कि SaveInstanceState () को विधि विधि से ठीक पहले कहा जाता है। ऑन पॉज़ मूल रूप से आखिरी विधि है जहां आपको कुछ सहेजना चाहिए क्योंकि इस विधि के बाद आप कभी भी या स्टॉप पर नहीं देख सकते थे। सिस्टम बस आपके सभी ऑब्जेक्ट्स को नष्ट करने की प्रक्रिया को मार सकता है जो कुछ भी हो और जो कुछ भी कर रहे हैं।

प्रश्न 3 उत्तर:

जब आप एक मारे गए आवेदन पर वापस आ जाएंगे तो क्या होगा?

  • एंड्रॉइड 2.2 से पहले - एप्लिकेशन लांचर गतिविधि के साथ भिखारी से शुरू होगा।
  • 2.2 से शुरू - सिस्टम पिछले अनुप्रयोग स्थिति को पुनर्स्थापित करेगा। इसका क्या मतलब है? इसका मतलब है कि आखिरी दृश्य गतिविधि को फिर से बनाया जाएगा (ऑन क्रेट + बंडल)। गतिविधि स्टैक के साथ क्या होगा? ढेर ठीक है लेकिन इस पर सभी गतिविधियां मर चुकी हैं। जब आप बैक बटन के साथ वापस आते हैं तो उनमें से प्रत्येक को फिर से बनाया जाएगा (ऑन क्रेट + बंडल)। इसके बारे में एक और बात है:

आम तौर पर, सिस्टम कुछ कार्य परिस्थितियों में एक कार्य को साफ़ करता है (रूट गतिविधि के ऊपर ढेर से सभी गतिविधियों को हटा देता है) जब उपयोगकर्ता उस कार्य को होम स्क्रीन से फिर से चुनता है। आम तौर पर, यह तब किया जाता है जब उपयोगकर्ता ने कुछ निश्चित समय के लिए कार्य नहीं किया है, जैसे कि 30 मिनट।

निष्कर्ष?

  1. ऐसा नहीं लगता कि हैंडलिंग गतिविधि रोटेशन समस्याओं को एंड्रॉइड द्वारा हल किया जा सकता है: configChanges = "ओरिएंटेशन"। जब आप ऐसा करते हैं तो आपको कई अन्य समस्याएं मिलेंगी जिन्हें आप जानते भी नहीं हैं।
  2. डीडीएमएस के साथ अपने आवेदन का परीक्षण करें - प्रक्रिया बंद करें बटन। यह देखो
  3. स्थिर चर का उपयोग करते समय सावधान रहें। ऐसा मत सोचो कि जब आपने उन्हें गतिविधि 1 में प्रारंभ किया था - तो आप उन्हें गतिविधि 2 में प्रारंभ करेंगे। वैश्विक सांख्यिकी शुरू करने के लिए एकमात्र सुरक्षित स्थान एप्लिकेशन क्लास होगा।
  4. याद रखें कि आप कभी भी स्टॉप या ऑनस्ट्राय पर कभी नहीं देख सकते हैं। फाइलें / डेटाबेस बंद करें, डाउनलोडर्स को रोकें रोकें। जब आप ऐप को बीजी में कुछ करना चाहते हैं - अग्रभूमि सेवा का उपयोग करें।

यह होगा ... आशा है कि मैंने अपने निबंध के साथ मदद की :)


सबसे पहले कृपया इसे देखें:

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

ऑनस्टॉप () कॉल किया जाता है जब गतिविधि उपयोगकर्ता के लिए अब दिखाई नहीं दे रही है, क्योंकि एक और गतिविधि फिर से शुरू हो गई है और इसे कवर कर रहा है। ऐसा इसलिए हो सकता है क्योंकि एक नई गतिविधि शुरू हो रही है, एक मौजूदा व्यक्ति को इसके सामने लाया जा रहा है, या यह नष्ट हो रहा है। या तो रीस्टार्ट () द्वारा पीछा किया गया है यदि यह गतिविधि उपयोगकर्ता के साथ बातचीत करने के लिए वापस आ रही है, या Destroy () पर यह गतिविधि दूर जा रही है।

इसलिए, जब आप अपने डिवाइस पर "होम" बटन दबाते हैं, तो आपकी वर्तमान अग्रभूमि गतिविधि को onStop() फिर onStop() , अन्य 4 को onStop() चाहिए onStop()

Google के दस्तावेज़ों के मुताबिक:

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

और, प्रक्रिया जीवन चक्र के लिए:

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

उपरोक्त सभी उद्धरण इस बात से आए हैं: एंड्रॉइड डेवलपर्स संदर्भ: गतिविधि

यह पुष्टि की जाती है कि सिस्टम कुछ स्मृति उपभोग अनुप्रयोगों को लॉन्च करते समय गैर-एसिव गतिविधियों और रीसायकल यादों को नष्ट कर सकता है। और आप अपनी गतिविधि में isFinishing() को कार्यान्वित कर सकते हैं और फिर isFinishing() में "मार" बटन का उपयोग करके पता लगा सकते हैं कि आपकी कौन सी गतिविधियां सिस्टम द्वारा छोड़ी जा रही हैं। लेकिन मुझे लगता है कि सिस्टम सबसे पुराना सबसे पहले नष्ट कर देगा। हालांकि "लॉन्च गतिविधि" का पुनर्नवीनीकरण होने पर अन्य गतिविधियों को रखने का कोई मतलब नहीं है।

अद्यतन करें

यहां से कुछ राय यहां मिलीं:

राज्य रोक दिया

जब कोई गतिविधि दिखाई नहीं दे रही है, लेकिन फिर भी स्मृति में, हम कहते हैं कि यह एक बंद राज्य में है। स्टॉप की गई गतिविधि को फिर से चलने वाली गतिविधि बनने के लिए सामने लाया जा सकता है। या, इसे नष्ट किया जा सकता है और स्मृति से हटा दिया जा सकता है।

प्रणाली एक बंद राज्य में गतिविधियों को चारों ओर रखती है क्योंकि यह संभावना है कि उपयोगकर्ता अभी भी कुछ समय बाद उन गतिविधियों पर वापस आना चाहेंगे, और एक रोका गतिविधि को पुनरारंभ करना स्क्रैच से गतिविधि शुरू करने से कहीं अधिक सस्ता है। ऐसा इसलिए है क्योंकि हमारे पास पहले से ही सभी वस्तुओं को स्मृति में लोड किया गया है और इसे बस इसे अग्रभूमि तक ले जाना है।

किसी भी बिंदु पर रोकथाम की गतिविधियों को स्मृति से हटाया जा सकता है।





android-activity