नमस्ते मैं सोच रहा हूं कि एंड्रॉइड मेमोरी कैसे प्रबंधित कर रहा है और मुझे कहीं भी सटीक उत्तर नहीं मिल रहा है। मान लें कि मेरे पास वर्तमान गतिविधि स्टैक पर 5 गतिविधियों के साथ एक आवेदन है (4 को रोक दिया गया है और 1 को फिर से शुरू किया गया है), कोई सेवा नहीं है। मैं होम बटन दबाता हूं ताकि मेरी सभी गतिविधियां बंद हो जाएं। मैं कुछ अन्य मेमोरी खपत एप्लिकेशन शुरू करता हूं और समग्र डिवाइस मेमोरी कम होने लगती है। और सवाल है
... मेरे आवेदन का क्या होगा?
- क्या स्मृति को पुनर्प्राप्त करने के लिए सिस्टम केवल एक या मेरी कुछ गतिविधियों को नष्ट कर सकता है?
- क्या सिस्टम मेरे आवेदन की पूरी प्रक्रिया को मार देगा? क्या सभी गतिविधियों को अच्छी तरह से नष्ट कर दिया जाएगा?
- जब मैं पूरी तरह से मारा गया तो मैं अपने आवेदन पर वापस आऊंगा तो क्या होगा? क्या यह भीख से शुरू होगा (पहली शुरुआत की तरह) या यह प्रचलित अवस्था में गतिविधियों को पुनर्प्राप्त करने की कोशिश करेगा / यदि हाँ - तो क्या यह केवल स्टैक के शीर्ष पर है या उन सभी में से एक है?
अपडेट करें:
इस सवाल को पूछने से पहले मैंने गतिविधि जीवन चक्र को कुछ बार देखा है लेकिन इसमें मेरे सवालों के जवाब नहीं हैं। मैंने कुछ परीक्षण किए और मेरे पास कुछ उत्तर हैं। DDMS में "स्टॉप प्रोसेस" परीक्षण के लिए एक संकेत था।
मैंने प्रश्न 1 के उत्तर का परीक्षण नहीं किया है, लेकिन जैसा कि गाइड कहता है:
यदि कोई गतिविधि रोक दी जाती है या बंद कर दी जाती है, तो सिस्टम गतिविधि को मेमोरी से ड्रॉप कर सकता है या तो इसे समाप्त करने के लिए कह सकता है, या बस इसकी प्रक्रिया को मार सकता है।
ऐसा लगता है कि प्रक्रिया को मारे बिना एक या एक से अधिक गतिविधियों को धीरे से (onDestroy विधि के साथ) नष्ट किया जा सकता है। आप बस (onCreate + बंडल) उन्हें वापस मिलने पर प्राप्त करेंगे।
प्रश्न 2 उत्तर:
हाँ। आम तौर पर सिस्टम पूरी प्रक्रिया को मारता है इसका मतलब है कि गतिविधियों और स्थिर क्षेत्रों सहित सभी डेटा नष्ट हो जाते हैं। यह अच्छी तरह से नहीं किया गया है - आपको अपनी रुकी हुई / रुकी हुई किसी भी गतिविधि के लिए onDestroy या finialize () नहीं मिलेगा। यही कारण है कि saveInstanceState () को ऑनपॉज विधि से ठीक पहले कहा जाता है। ऑनपॉज मूल रूप से अंतिम विधि है जहां आपको कुछ बचाना चाहिए क्योंकि इस विधि के बाद आप कभी भी onStop या onDestroy नहीं देख सकते हैं। सिस्टम आपकी सभी वस्तुओं को नष्ट करने की प्रक्रिया को मार सकता है और वे जो कुछ भी कर रहे हैं।
प्रश्न 3 उत्तर:
जब आप मारे गए आवेदन पर वापस आ जाएंगे तो क्या होगा?
- एंड्रॉइड 2.2 से पहले - एप्लिकेशन लॉन्चरिंग से शुरू होगा, लॉन्चर गतिविधि के साथ।
- 2.2 से शुरू - सिस्टम पिछले एप्लिकेशन स्थिति को पुनर्स्थापित करेगा। इसका क्या मतलब है? इसका मतलब है कि अंतिम दृश्य गतिविधि फिर से बनाई जाएगी (onCreate + बंडल)। गतिविधि स्टैक के साथ क्या होगा? स्टैक ठीक है लेकिन इस पर सभी गतिविधियां मृत हैं। जब आप बैक बटन के साथ इसे प्राप्त करेंगे तो उनमें से प्रत्येक को फिर से बनाया जाएगा (onCreate + बंडल)। इसके बारे में एक और बात है:
जब उपयोगकर्ता होम स्क्रीन से उस कार्य को फिर से चुनता है, तो सामान्य रूप से, सिस्टम एक कार्य को साफ़ कर देता है (कुछ गतिविधियों को रूट गतिविधि के ऊपर से स्टैक से हटा देता है)। आमतौर पर, यह किया जाता है यदि उपयोगकर्ता ने किसी निश्चित समय के लिए कार्य का दौरा नहीं किया है, जैसे कि 30 मिनट।
निष्कर्ष?
- ऐसा मत सोचो कि गतिविधि रोटेशन की समस्याओं को संभालना Android द्वारा हल किया जा सकता है: configChanges = "अभिविन्यास"। जब आप ऐसा करते हैं, तो आपको कई अन्य समस्याएं मिलेंगी जिनके बारे में आप जानते भी नहीं हैं।
- डीडीएमएस के साथ अपने आवेदन का परीक्षण करें - प्रक्रिया बटन बंद करें। यह देखो
- स्थिर चर का उपयोग करते समय सावधान रहें। यह मत सोचिए कि जब आपने उन्हें गतिविधि 1 में आरंभीकृत किया था - तो आपने उन्हें गतिविधि 2 में आरंभीकृत किया होगा। वैश्विक स्टेटिक्स को आरम्भ करने का एकमात्र सुरक्षित स्थान एप्लीकेशन क्लास होगा।
- याद रखें कि आप कभी भी onStop या onDestroy नहीं देख सकते हैं। फ़ाइलें / डेटाबेस बंद करें, डाउनलोडकर्ताओं को ऑनपॉज़ में रोकें। जब आप एप्लिकेशन को बीजी में कुछ करने के लिए चाहते हैं - अग्रभूमि सेवा का उपयोग करें।
यही होगा ... आशा है कि मैंने अपने निबंध के साथ मदद की :)