इस पेज पर, व्यू पर आधारित लेआउट में मेमोरी लीक का पता लगाने और उन्हें ट्रिगर करने के बारे में जानकारी दी गई है. हीप डंप कैप्चर करने और उनका विश्लेषण करने के बारे में बुनियादी जानकारी के लिए, हीप डंप कैप्चर करना लेख पढ़ें.
मेमोरी लीक ढूंढना
मेमोरी लीक से जुड़ी क्लास को तुरंत फ़िल्टर करने के लिए, क्लास ड्रॉप-डाउन खोलें और गतिविधि/फ़्रैगमेंट लीक दिखाएं चुनें. Android Studio, आपके ऐप्लिकेशन में Activity और Fragment इंस्टेंस के लिए, मेमोरी लीक करने वाली क्लास दिखाता है. फ़िल्टर से दिखने वाले डेटा में ये शामिल हैं:
- ऐसे
Activityइंस्टेंस जिन्हें डिस्ट्रॉय कर दिया गया है, लेकिन अब भी उनका रेफ़रंस दिया जा रहा है. Fragmentऐसे उदाहरण जिनमें मान्यFragmentManagerनहीं है, लेकिन फिर भी उनका रेफ़रंस दिया जा रहा है.
ध्यान दें कि फ़िल्टर इन स्थितियों में फ़ॉल्स पॉज़िटिव नतीजे दे सकता है:
Fragmentबनाया गया है, लेकिन इसका इस्तेमाल अब तक नहीं किया गया है.Fragmentको कैश मेमोरी में सेव किया जा रहा है, लेकिनFragmentTransactionके हिस्से के तौर पर नहीं.
मेमोरी लीक को मैन्युअल तरीके से ज़्यादा खोजने के लिए, क्लास और इंस्टेंस की सूचियाँ ब्राउज़ करें. इससे आपको ऐसे ऑब्जेक्ट मिलेंगे जिनका बनाए रखा गया साइज़ बड़ा है. इन वजहों से होने वाली मेमोरी लीक का पता लगाएं:
Activity,Context,View,Drawable, और अन्य ऑब्जेक्ट के लंबे समय तक चलने वाले रेफ़रंस. इनमें ऐसे ऑब्जेक्ट भी शामिल हैं जोActivityयाContextकंटेनर का रेफ़रंस सेव कर सकते हैं.- नॉन-स्टैटिक इनर क्लास, जैसे कि a
Runnable, जोActivityइंस्टेंस को होल्ड कर सकती है. - ऐसी कैश मेमोरी जो ऑब्जेक्ट को ज़रूरत से ज़्यादा समय तक सेव रखती हैं.
मेमोरी लीक की संभावित समस्याओं का पता चलने पर, इंस्टेंस की जानकारी में मौजूद फ़ील्ड और रेफ़रंस टैब का इस्तेमाल करके, अपनी दिलचस्पी के इंस्टेंस या सोर्स कोड की लाइन पर जाएं.
जांच के लिए मेमोरी लीक ट्रिगर करें
अपने ऐप्लिकेशन में मेमोरी लीक की समस्या को ट्रिगर करने के लिए, इनमें से किसी एक तरीके का इस्तेमाल करें:
- डिवाइस को पोर्ट्रेट से लैंडस्केप मोड में और फिर से पोर्ट्रेट मोड में कई बार घुमाएं. ऐसा अलग-अलग गतिविधि की स्थितियों में करें. डिवाइस को घुमाने पर, ऐप्लिकेशन में अक्सर
Activity,ContextयाViewऑब्जेक्ट लीक हो जाता है. ऐसा इसलिए होता है, क्योंकि सिस्टमActivityको फिर से बनाता है. अगर आपका ऐप्लिकेशन, इनमें से किसी ऑब्जेक्ट का रेफ़रंस कहीं और रखता है, तो सिस्टम उसे गार्बेज इकट्ठा नहीं कर सकता. - अलग-अलग ऐक्टिविटी की स्थितियों में, अपने ऐप्लिकेशन और किसी दूसरे ऐप्लिकेशन के बीच स्विच करें. उदाहरण के लिए, होम स्क्रीन पर जाएं. इसके बाद, अपने ऐप्लिकेशन पर वापस आएं.