2010-12-16 25 views
9

मेरे पास मेरे कोड में एक बग है जो मुझे लगता है कि मैं एंड्रॉइड लाइफसाइक्ल को पूरी तरह समझ नहीं पा रहा हूं। हां, मैंने सभी दस्तावेज़ों को पढ़ लिया है और आरेखों को देखा है, लेकिन वे केवल डेटा को सहेजने के बारे में बात करते हैं, जब गतिविधि फोकस हो सकती है या मारे जा सकती है। हालांकि, मेरा सवाल यह है कि अगर मुझे राज्य को बचाने की ज़रूरत नहीं है, तो & उनके संग्रहीत मूल्यों के चर के साथ क्या होता है? मुझे उम्मीद थी कि उन्हें नष्ट किया जाए, लेकिन मेरे कोड में एक बग अन्यथा इंगित करता है।एंड्रॉइड - ऑन डेस्ट्राय गतिविधि को नष्ट करना चाहता है, इसकी चर और मुक्त मेमोरी

मेरे मामले में यहां क्या हुआ है। मेरे पास एक ऐसी गतिविधि है जो कस्टम व्यू लॉन्च करती है (कोई एक्सएमएल नहीं, मैं अपने कस्टम व्यू में स्क्रीन पर बिटमैप्स खींचता हूं)। वर्तमान में मेरी गतिविधि में केवल एक ही चर है जो मेरे दृश्य के लिए एक चर है: गेम व्यू गेम व्यू;

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

मुझे उम्मीद है कि स्थैतिक चर सभी वस्तुओं में एक ही मूल्य बने रहने की उम्मीद है, लेकिन मुझे उम्मीद है कि इस वैरिएबल को उस गतिविधि के सभी अन्य चर और वस्तुओं के साथ नष्ट कर दिया जाएगा। हालांकि, ऐसा प्रतीत नहीं होता है। जब यह गतिविधि दोबारा लॉन्च की जाती है, तो इस स्थैतिक चर में अभी भी इसके पिछले भाग से अपना पिछला मान होता है - भले ही ऑनस्ट्रायड को बुलाया गया हो।

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

इस में किसी भी अंतर्दृष्टि के लिए धन्यवाद।

उत्तर

9

onDestroy एक उदाहरण विधि है और यह रिलीज़ होने वाली किसी भी स्मृति (या कचरा कलेक्टर को रिलीज़ करने की अनुमति देता है) इसी उदाहरण का होगा। गतिविधियां सिंगलटन नहीं हैं; एक गतिविधि के एक से अधिक उदाहरण हो सकते हैं।

स्टेटिक चर वर्ग वर्ग चर हैं और उस वर्ग के सभी उदाहरणों के लिए स्वीकार्य हैं। कक्षा शुरू होने पर उन्हें प्रारंभ किया जाता है, न कि कक्षा के प्रत्येक उदाहरण को बनाया जाता है।

अधिक जानकारी के लिए कृपया Understanding Instance and Class members देखें। एक अंश:

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

+0

धन्यवाद, मुझे पता था कि स्थैतिक चर सभी वस्तुओं में एक ही स्मृति स्थान है, लेकिन मुझे नहीं पता था कि "वर्ग चर का भी वर्गीकरण किए बिना कक्षा का उदाहरण बनाये जा सकता है।"। इससे समझाया जाएगा कि वस्तुओं को नष्ट क्यों किया जाता है क्यों यह मान चारों ओर लटका हुआ है। बीटीडब्लू, जब मैं डेस्ट्रॉय पर कहता हूं, मैंने इसे बनाने के अलावा इसे या किसी भी जीवन चक्र विधि को नहीं बनाया है - अभी तक। यही कारण है कि जब मैंने बैक बटन दबाया, तो उम्मीद की गई कि गतिविधि के उस उदाहरण से जुड़े सभी डेटा को हटा दिया गया है। लेकिन अब मैं समझता हूं कि यह एक चर परिवर्तनीय क्यों है। धन्यवाद। – Mike

+0

वहां रगड़ है। एक स्थैतिक चर वर्ग के किसी भी उदाहरण से संबंधित डेटा नहीं है। – hpique

+0

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