7

मैं एंड्रॉइड मेमोरी पर कम होने पर और ओएस को फिर से दावा करने के लिए कदम उठाने के चरणों के बारे में असंगत दस्तावेज़ीकरण और चर्चा देख रहा हूं। अधिक विशेष रूप से, एंड्रॉइड गतिविधि/खंड, या पूरी प्रक्रिया की ग्रैन्युलरिटी पर मारता है?एंड्रॉइड मेमोरी प्रबंधन ग्रैन्युलरिटी - गतिविधि या प्रक्रिया?

उदाहरण के लिए, यदि गतिविधि बी गतिविधि ए के सामने लॉन्च किया गया है (और दोनों गतिविधियां एक ही ऐप/प्रक्रिया का हिस्सा हैं), गतिविधि ए को ओएस द्वारा मार दिया जा सकता है जबकि गतिविधि बी अग्रभूमि में है और उपयोगकर्ता है गतिविधि बी के साथ बातचीत (मान लीजिए: स्क्रीन चालू है, वर्तमान ऐप अग्रभूमि में बनी हुई है, कोई अभिविन्यास परिवर्तन नहीं होता है)?

2011 से यह SO answer (Google पर एंड्रॉइड टीम पर डियान हैकबर्न द्वारा) सुझाव देता है कि एंड्रॉइड एक प्रक्रिया की ग्रैन्युलरिटी पर मारता है, न कि गतिविधि।

Recreating an Activity पर Android डेवलपर पृष्ठों पर, यह कहते हैं:

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

सूचना अस्पष्टता: "प्रणाली पृष्ठभूमि प्रक्रियाओं शट डाउन चाहिए।"

onSaveInstanceState के लिए Android डेवलपर पृष्ठों पर, यह कहते हैं:

उदाहरण के लिए, यदि गतिविधि बी गतिविधि एक के सामने शुरू की है, और कुछ बिंदु गतिविधि एक में, संसाधनों को पुनः प्राप्त करने मार दिया जाता है गतिविधि एक इच्छा इस विधि के माध्यम से अपने यूजर इंटरफेस की वर्तमान स्थिति को बचाने का मौका है

इन और कई अन्य दस्तावेज़ पृष्ठों और ऑनलाइन चर्चा के माध्यम से पढ़ने के बाद, यह स्पष्ट नहीं है कि सही उत्तर क्या है।

मेरे पास टुकड़ों के बारे में भी एक ही प्रश्न है: क्या कम स्मृति के कारण पृष्ठभूमि की टुकड़ा मारे जा सकता है, इसकी पूरी प्रक्रिया के बिना?

उत्तर

5

मेमोरी मैनेजमेंट दो अलग-अलग स्तरों पर होता है: कचरा संग्रहण के माध्यम से (unreferenced वस्तुओं रीसाइक्लिंग) और प्रक्रिया स्तर पर, के रूप में this Android blog post में विस्तार से बताया। केवल एक ही गतिविधि को मारने की कोई अवधारणा नहीं है (याद रखें: एंड्रॉइड लिनक्स पर आधारित है और लिनक्स में गतिविधियों या घटकों की कोई अवधारणा नहीं है, केवल प्रक्रियाएं)।

2011 से यह SO उत्तर (Google पर एंड्रॉइड टीम पर डियान हैकबर्न द्वारा) सुझाव देता है कि एंड्रॉइड एक प्रक्रिया की ग्रैन्युलरिटी पर मारता है, न कि गतिविधि।

यह अभी भी सही है।

एक गतिविधि पुनः पर Android डेवलपर पृष्ठों पर, यह कहते हैं ...

हाँ, 'पृष्ठभूमि प्रक्रियाओं' यह उल्लेख है कि वास्तव में प्रक्रिया ऊपर ब्लॉग और the documentation में वर्णित वर्ग है। यह उन गतिविधियों को संदर्भित करता है जो पहले मौजूद थे, लेकिन वर्तमान अग्रभूमि/दृश्य प्रक्रियाओं का हिस्सा नहीं हैं।

onSaveInstanceState के लिए Android डेवलपर पृष्ठों पर, यह कहते हैं:

हाँ, वे इस मामले में जहां आप किसी अन्य प्रक्रिया से एक गतिविधि का शुभारंभ चर्चा कर रहे हैं (जब आप implicit intents उपयोग कर रहे हैं के रूप में होने की संभावना है)। इस समय के दौरान, आपकी प्रक्रिया अग्रभूमि प्रक्रिया नहीं है और इसलिए निश्चित रूप से मारना संभव है यदि अग्रभूमि गतिविधि का संयोजन + अग्रभूमि सेवाएं बहुत अधिक हैं।

मेरे पास टुकड़ों के बारे में भी एक ही प्रश्न है: क्या कम स्मृति के कारण पृष्ठभूमि की टुकड़ा मारे जा सकता है, इसकी पूरी प्रक्रिया को मारने के बिना?

नहीं, कम स्मृति के कारण टुकड़े नहीं मारे जा सकते हैं।

+0

पर "oom_adj और ऊपरी प्रक्रिया महत्व के बीच के रिश्ते" में इस का एक संक्षिप्त विश्लेषण में पाया गया। मुझे पता है कि लिनक्स में गतिविधियों की कोई अवधारणा नहीं है, लेकिन मुझे यकीन नहीं था कि क्या एंड्रॉइड व्यक्तिगत गतिविधियों को मारने की क्षमता में जोड़ा गया है। स्पष्टीकरण देने के लिए धन्यवाद! –

0

मैं एंड्रॉइड दिशानिर्देशों और दस्तावेज़ीकरण के पक्ष में गलती करूंगा (हालांकि, यह बहुत अच्छा होगा अगर वे कोड प्रलेखन और SO उत्तरों में अधिक स्पष्ट थे)। http://developer.android.com/guide/components/tasks-and-back-stack.html से:

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

0

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

मैं अनुभाग समझ में आता है कि http://www.programering.com/a/MjNzADMwATE.html

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