इस दस्तावेज़ में यह माना गया है कि आपने मेमोरी मैनेज करने के लिए, Android ऐप्लिकेशन के सबसे सही तरीकों का पालन किया है. जैसे, अपने ऐप्लिकेशन की मेमोरी मैनेज करना.
परिचय
मेमोरी लीक एक तरह का रिसॉर्स लीक है. यह तब होता है, जब कोई कंप्यूटर प्रोग्राम, असाइन की गई उस मेमोरी को रिलीज़ नहीं करता जिसकी अब ज़रूरत नहीं है. लीक की वजह से, ऐप्लिकेशन ओएस से उपलब्ध मेमोरी से ज़्यादा मेमोरी का अनुरोध कर सकता है. इससे ऐप्लिकेशन क्रैश हो सकता है. Android ऐप्लिकेशन में मेमोरी लीक होने की कई वजहें हो सकती हैं. जैसे, संसाधनों को सही तरीके से न हटाना या ज़रूरत न होने पर लिसनर का रजिस्ट्रेशन रद्द न करना.
इस दस्तावेज़ में, आपको अपने कोड में मेमोरी लीक को रोकने, उसका पता लगाने, और उसे ठीक करने के कुछ सबसे सही तरीके बताए गए हैं. अगर आपने इस दस्तावेज़ में बताए गए तरीके आज़माए हैं और आपको लगता है कि हमारे एसडीके में मेमोरी लीक की समस्या है, तो Google के एसडीके से जुड़ी समस्याओं की शिकायत करने का तरीका देखें.
सहायता टीम से संपर्क करने से पहले
Google की सहायता टीम को मेमोरी लीक की शिकायत करने से पहले, इस दस्तावेज़ में दिए गए सबसे सही तरीके और डीबग करने के तरीके अपनाएं. इससे यह पक्का किया जा सकेगा कि गड़बड़ी आपके कोड में नहीं है. इन चरणों को पूरा करने से आपकी समस्या हल हो सकती है. अगर ऐसा नहीं होता है, तो इनसे वह जानकारी जनरेट होती है जिसकी ज़रूरत Google की सहायता टीम को आपकी मदद करने के लिए होती है.
मेमोरी लीक होने से रोकना
Google SDK टूल का इस्तेमाल करने वाले कोड में मेमोरी लीक होने की सबसे आम वजहों से बचने के लिए, ये सबसे सही तरीके अपनाएं.
Android ऐप्लिकेशन के लिए सबसे सही तरीके
देखें कि आपने अपने Android ऐप्लिकेशन में ये सभी काम किए हैं या नहीं:
- इस्तेमाल न किए जा रहे संसाधनों को रिलीज़ करें.
- ज़रूरत न होने पर, लिसनर का रजिस्ट्रेशन रद्द करें.
- ज़रूरत न होने पर टास्क रद्द करना.
- संसाधनों को रिलीज़ करने के लिए, लाइफ़साइकल के तरीकों को फ़ॉरवर्ड करना.
- SDK टूल के नए वर्शन इस्तेमाल करें.
- शुरुआती प्रोसेस के दौरान मुख्य थ्रेड को ब्लॉक करने से बचें, ताकि एएनआर की गड़बड़ी न हो.
इनमें से हर तरीके के बारे में ज़्यादा जानने के लिए, यहां दिए गए सेक्शन देखें.
इस्तेमाल नहीं किए जा रहे संसाधनों को रिलीज़ करना
जब आपका Android ऐप्लिकेशन किसी संसाधन का इस्तेमाल करता है, तो ज़रूरत न होने पर उसे रिलीज़ करना न भूलें. अगर ऐसा नहीं किया जाता है, तो ऐप्लिकेशन के बंद होने के बाद भी रिसॉर्स मेमोरी का इस्तेमाल करता रहता है. ज़्यादा जानकारी के लिए, Android के दस्तावेज़ में गतिविधि पूरी होने की प्रोसेस देखें.
GeoSDKs में पुराने GoogleMap रेफ़रंस रिलीज़ करना
एक आम गलती यह है कि अगर NavigationView या MapView का इस्तेमाल करके कैश मेमोरी में सेव किया जाता है, तो GoogleMap से मेमोरी लीक हो सकती है. GoogleMap का NavigationView या MapView के साथ 1 से 1 का संबंध होता है. इससे इसे वापस पाया जाता है. आपको यह पक्का करना होगा कि GoogleMap को कैश मेमोरी में सेव न किया गया हो या NavigationView#onDestroy या MapView#onDestroy को कॉल करने पर रेफ़रंस को रिलीज़ किया गया हो. अगर NavigationSupportFragment, MapSupportFragment या इन व्यू को रैप करने वाले अपने फ़्रैगमेंट का इस्तेमाल किया जा रहा है, तो रेफ़रंस को Fragment#onDestroyView में रिलीज़ करना होगा.
class NavFragment : SupportNavigationFragment() {
var googleMap: GoogleMap?
override fun onCreateView(
inflater: LayoutInflater,
parent: ViewGroup?,
savedInstanceState: Bundle?,
): View {
super.onCreateView(inflater,parent,savedInstanceState)
getMapAsync{map -> googleMap = map}
}
override fun onDestroyView() {
googleMap = null
}
}
ज़रूरत न होने पर, लिसनर का रजिस्ट्रेशन रद्द करें
जब आपका Android ऐप्लिकेशन किसी इवेंट के लिए लिसनर को रजिस्टर करता है, जैसे कि बटन पर क्लिक करना या व्यू की स्थिति में बदलाव करना, तो लिसनर को अनरजिस्टर करना न भूलें. ऐसा तब करें, जब ऐप्लिकेशन को इवेंट को मॉनिटर करने की ज़रूरत न हो. अगर ऐसा नहीं किया जाता है, तो ऐप्लिकेशन का काम पूरा होने के बाद भी लिसनर मेमोरी का इस्तेमाल करते रहते हैं.
उदाहरण के लिए, मान लें कि आपका ऐप्लिकेशन, Navigation SDK का इस्तेमाल करता है और वह मंज़िल पर पहुंचने के इवेंट को सुनने के लिए, इस लिसनर को कॉल करता है:
addArrivalListener
मंज़िल पर पहुंचने के इवेंट को सुनने का तरीका. इसे
removeArrivalListener
को भी कॉल करना चाहिए, जब उसे मंज़िल पर पहुंचने के इवेंट को मॉनिटर करने की ज़रूरत न हो.
var arrivalListener: Navigator.ArrivalListener? = null
fun registerNavigationListeners() {
arrivalListener =
Navigator.ArrivalListener {
...
}
navigator.addArrivalListener(arrivalListener)
}
override fun onDestroy() {
navView.onDestroy()
if (arrivalListener != null) {
navigator.removeArrivalListener(arrivalListener)
}
...
super.onDestroy()
}
ज़रूरत न होने पर टास्क रद्द करना
जब कोई Android ऐप्लिकेशन, डाउनलोड या नेटवर्क अनुरोध जैसा कोई एसिंक्रोनस टास्क शुरू करता है, तो पक्का करें कि टास्क पूरा होने पर उसे रद्द कर दिया जाए. अगर टास्क को रद्द नहीं किया जाता है, तो वह बैकग्राउंड में चलता रहता है. भले ही, ऐप्लिकेशन ने उसे पूरा कर लिया हो.
सबसे सही तरीकों के बारे में ज़्यादा जानने के लिए, Android के दस्तावेज़ में अपने ऐप्लिकेशन की मेमोरी मैनेज करना लेख पढ़ें.
संसाधनों को रिलीज़ करने के लिए, लाइफ़साइकल के तरीकों को फ़ॉरवर्ड करना
अगर आपका ऐप्लिकेशन, नेविगेशन या Maps SDK का इस्तेमाल करता है, तो navView को लाइफ़साइकल के तरीके (बोल्ड में दिखाए गए) फ़ॉरवर्ड करके, संसाधनों को रिलीज़ करना न भूलें. ऐसा करने के लिए, Navigation SDK में NavigationView या Maps या Navigation SDK में MapView का इस्तेमाल करें. NavigationView और MapView का सीधे तौर पर इस्तेमाल करने के बजाय, SupportNavigationFragment या SupportMapFragment का भी इस्तेमाल किया जा सकता है. सपोर्ट फ़्रैगमेंट, लाइफ़साइकल के तरीकों को फ़ॉरवर्ड करने की प्रोसेस को मैनेज करते हैं.
class NavViewActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
...
navView = ...
navView.onCreate(savedInstanceState)
...
}
override fun onSaveInstanceState(savedInstanceState: Bundle) {
super.onSaveInstanceState(savedInstanceState)
navView.onSaveInstanceState(savedInstanceState)
}
override fun onTrimMemory(level: Int) {
super.onTrimMemory(level)
navView.onTrimMemory(level)
}
/* Same with
override fun onStart()
override fun onResume()
override fun onPause()
override fun onConfigurationChanged(...)
override fun onStop()
override fun onDestroy()
*/
}
एसडीके के नए वर्शन इस्तेमाल करना
Google के एसडीके टूल को नई सुविधाओं, गड़बड़ी ठीक करने, और परफ़ॉर्मेंस को बेहतर बनाने के लिए लगातार अपडेट किया जाता है. इन समस्याओं को ठीक करने के लिए, अपने ऐप्लिकेशन में मौजूद एसडीके को अप-टू-डेट रखें.
एएनआर की गड़बड़ियों से बचने के लिए, इनिशलाइज़ेशन के दौरान मुख्य थ्रेड को ब्लॉक करने से बचें
जब कोई ऐप्लिकेशन मुख्य थ्रेड को बहुत ज़्यादा समय तक ब्लॉक करता है, तो "ऐप्लिकेशन काम नहीं कर रहा है" (एएनआर) गड़बड़ी हो सकती है. ANR की गड़बड़ियों को रोकने के लिए, onCreate() जैसे लाइफ़साइकल के तरीकों को जितना हो सके उतना हल्का रखें. इसके लिए, लंबे समय तक चलने वाले टास्क को बाद में पूरा करें या उन्हें मुख्य थ्रेड से बाहर चलाएं.
एसडीके टूल को शुरू करने से जुड़ी एएनआर वाली गड़बड़ियों से बचने के लिए:
- एक बार में सिर्फ़ एक मैप इंस्टेंस बनाएं.
- मैप को इंस्टैंशिएट करते समय, यूज़र इंटरफ़ेस (यूआई) थ्रेड पर कम से कम काम करें.
मेमोरी लीक को डीबग करना
अगर इस दस्तावेज़ में दिए गए सभी सुझावों को लागू करने के बाद भी आपको मेमोरी लीक की समस्या दिखती है, तो डीबग करने के लिए यह तरीका अपनाएं.
शुरू करने से पहले, आपको यह पता होना चाहिए कि Android, मेमोरी को कैसे मैनेज करता है. ज़्यादा जानकारी के लिए, Android पर मेमोरी मैनेज करने की खास जानकारी लेख पढ़ें.
मेमोरी लीक को डीबग करने के लिए, यह तरीका अपनाएं:
- समस्या को फिर से दोहराएं. यह चरण, गड़बड़ी को डीबग करने के लिए ज़रूरी है.
- देखें कि मेमोरी का इस्तेमाल उम्मीद के मुताबिक है या नहीं. देखें कि मेमोरी के इस्तेमाल में हुई बढ़ोतरी, असल में मेमोरी लीक है या आपके ऐप्लिकेशन को चलाने के लिए ज़रूरी मेमोरी है.
- हाई-लेवल पर डीबग करना. डीबग करने के लिए, कई तरह की यूटिलिटी का इस्तेमाल किया जा सकता है. Android में मेमोरी से जुड़ी समस्याओं को डीबग करने के लिए, तीन अलग-अलग स्टैंडर्ड टूल सेट उपलब्ध हैं: Android Studio, Perfetto, और Android डीबग ब्रिज (एडीबी) कमांड लाइन यूटिलिटी.
- देखें कि आपका ऐप्लिकेशन कितनी मेमोरी इस्तेमाल कर रहा है. हीप डंप और ऐलोकेशन ट्रैकिंग की जानकारी पाएं. इसके बाद, उसका विश्लेषण करें.
- मेमोरी लीक की समस्या को ठीक करना.
यहां दिए गए सेक्शन में, इन चरणों के बारे में ज़्यादा जानकारी दी गई है.
पहला चरण: समस्या को फिर से दोहराना
अगर आपको समस्या को फिर से दोहराने में कामयाबी नहीं मिली है, तो पहले उन स्थितियों पर विचार करें जिनकी वजह से मेमोरी लीक हो सकती है. अगर आपको पता है कि समस्या फिर से हुई है, तो सीधे हीप डंप को देखने से काम बन सकता है. हालांकि, अगर आपको ऐप्लिकेशन के स्टार्टअप या किसी अन्य समय पर हीप डंप मिलता है, तो हो सकता है कि आपने लीक को ट्रिगर करने वाली शर्तें चालू न की हों. समस्या को फिर से दोहराने की कोशिश करते समय, अलग-अलग स्थितियों में काम करने के बारे में सोचें:
कौनसी सुविधाएं चालू की गई हैं?
उपयोगकर्ता की किन कार्रवाइयों के क्रम से, डेटा लीक होने की समस्या ट्रिगर होती है?
- क्या आपने इस क्रम को चालू करने के लिए, कई बार कोशिश की है?
ऐप्लिकेशन, लाइफ़साइकल की किन स्थितियों से गुज़रा है?
- क्या आपने लाइफ़साइकल की अलग-अलग स्थितियों के हिसाब से, कई बार बदलाव करके देखे हैं?
पक्का करें कि एसडीके के नए वर्शन में, समस्या को फिर से दोहराया जा सके. ऐसा हो सकता है कि पिछले वर्शन की समस्या को पहले ही ठीक कर दिया गया हो.
दूसरा चरण: यह देखना कि ऐप्लिकेशन, मेमोरी का इस्तेमाल उम्मीद के मुताबिक कर रहा है या नहीं
हर सुविधा के लिए अतिरिक्त मेमोरी की ज़रूरत होती है. अलग-अलग स्थितियों को डीबग करते समय, इस बात पर ध्यान दें कि क्या यह सामान्य इस्तेमाल है या वाकई में मेमोरी लीक की समस्या है. उदाहरण के लिए, अलग-अलग सुविधाओं या उपयोगकर्ता के टास्क के लिए, इन संभावनाओं पर विचार करें:
लीक होने की संभावना: किसी स्थिति को बार-बार दोहराने से, समय के साथ मेमोरी का इस्तेमाल बढ़ता है.
मेमोरी के इस्तेमाल का अनुमान: सिनैरियो बंद होने के बाद, मेमोरी को फिर से इस्तेमाल किया जाता है.
मेमोरी का इस्तेमाल उम्मीद के मुताबिक हो सकता है: मेमोरी का इस्तेमाल कुछ समय के लिए बढ़ता है और फिर कम हो जाता है. ऐसा, सीमित कैश मेमोरी या मेमोरी के अन्य इस्तेमाल की वजह से हो सकता है.
अगर ऐप्लिकेशन के काम करने का तरीका, मेमोरी के इस्तेमाल के हिसाब से सही है, तो ऐप्लिकेशन की मेमोरी को मैनेज करके समस्या को हल किया जा सकता है. मदद पाने के लिए, अपने ऐप्लिकेशन की मेमोरी मैनेज करना लेख पढ़ें.
तीसरा चरण: हाई लेवल पर डीबग करना
मेमोरी लीक को डीबग करते समय, हाई लेवल से शुरू करें. इसके बाद, संभावनाओं को कम करने के बाद, ज़्यादा जानकारी देखें. इनमें से किसी एक हाई-लेवल डीबगिंग टूल का इस्तेमाल करके, सबसे पहले यह विश्लेषण करें कि क्या समय के साथ मेमोरी लीक हो रही है:
Android Studio मेमोरी प्रोफ़ाइलर (सुझाया गया)
Android Studio मेमोरी प्रोफ़ाइलर
इस टूल की मदद से, इस्तेमाल की गई मेमोरी का हिस्टोग्राम देखा जा सकता है. इसी इंटरफ़ेस से, हीप डंप और ऐलोकेशन ट्रैकिंग को भी ट्रिगर किया जा सकता है. यह टूल, डिफ़ॉल्ट रूप से सुझाया जाता है. ज़्यादा जानकारी के लिए, Android Studio मेमोरी प्रोफ़ाइलर देखें.
Perfetto मेमोरी काउंटर
Perfetto की मदद से, कई मेट्रिक को ट्रैक करने पर सटीक कंट्रोल मिलता है. साथ ही, यह सभी मेट्रिक को एक ही हिस्टोग्राम में दिखाता है. ज़्यादा जानकारी के लिए, Perfetto मेमोरी काउंटर देखें.

Android डीबग ब्रिज (एडीबी) कमांड लाइन यूटिलिटी
Perfetto की मदद से ट्रैक की जा सकने वाली ज़्यादातर चीज़ें, adb कमांड लाइन यूटिलिटी के तौर पर भी उपलब्ध होती हैं. इन्हें सीधे तौर पर क्वेरी किया जा सकता है. इसके कुछ अहम उदाहरण
ये हैं:
Meminfo की मदद से, किसी समय पर मेमोरी की पूरी जानकारी देखी जा सकती है.
Procstats, समय के साथ इकट्ठा किए गए कुछ अहम आंकड़े उपलब्ध कराता है.
यहां देखने के लिए एक अहम आंकड़ा, ज़्यादा से ज़्यादा फ़िज़िकल मेमोरी फ़ुटप्रिंट (maxRSS) है. यह वह मेमोरी है जिसकी ज़रूरत ऐप्लिकेशन को समय के साथ पड़ती है. ऐसा हो सकता है कि MaxPSS सटीक न हो. सटीक जानकारी पाने का तरीका जानने के लिए, adb shell dumpsys procstats --help –start-testing फ़्लैग देखें.
ऐलोकेशन ट्रैकिंग
एलोकेशन ट्रैकिंग से उस स्टैक ट्रेस की पहचान की जाती है जहां मेमोरी का इस्तेमाल किया गया था और उसे खाली नहीं किया गया था. यह तरीका, नेटिव कोड में लीक का पता लगाने में खास तौर पर मददगार होता है. यह टूल स्टैक ट्रेस की पहचान करता है. इसलिए, यह समस्या की असल वजह को तुरंत डीबग करने या समस्या को फिर से पैदा करने का तरीका जानने का एक बेहतरीन ज़रिया हो सकता है. एलोकेशन ट्रैकिंग का इस्तेमाल करने का तरीका जानने के लिए, एलोकेशन ट्रैकिंग की मदद से नेटिव कोड में मेमोरी को डीबग करना लेख पढ़ें.
चौथा चरण: हीप डंप की मदद से, ऐप्लिकेशन की मेमोरी के इस्तेमाल की जांच करना
मेमोरी लीक का पता लगाने का एक तरीका यह है कि अपने ऐप्लिकेशन का हीप डंप पाएं और फिर लीक की जांच करें. हीप डंप, किसी ऐप्लिकेशन की मेमोरी में मौजूद सभी ऑब्जेक्ट का स्नैपशॉट होता है. इसका इस्तेमाल, मेमोरी लीक और मेमोरी से जुड़ी अन्य समस्याओं का पता लगाने के लिए किया जा सकता है.
Android Studio, मेमोरी लीक का पता लगा सकता है. हालांकि, GC इन्हें ठीक नहीं कर सकता. जब हीप डंप को कैप्चर किया जाता है, तो Android Studio यह जांच करता है कि कोई ऐसी गतिविधि या फ़्रैगमेंट तो नहीं है जो अब भी ऐक्सेस किया जा सकता है, लेकिन उसे पहले ही मिटा दिया गया है.
- हीप डंप कैप्चर करना.
- मेमोरी लीक का पता लगाने के लिए, हीप डंप का विश्लेषण करना.
- मेमोरी लीक की समस्या को ठीक करना.
ज़्यादा जानकारी के लिए, ये सेक्शन देखें.
हीप डंप को कैप्चर करना
हीप डंप कैप्चर करने के लिए, Android डीबग ब्रिज (एडीबी) या Android Studio मेमोरी प्रोफ़ाइलर का इस्तेमाल किया जा सकता है.
हीप डंप कैप्चर करने के लिए, adb का इस्तेमाल करना
adb का इस्तेमाल करके हीप डंप कैप्चर करने के लिए, यह तरीका अपनाएं:
- अपने Android डिवाइस को कंप्यूटर से कनेक्ट करें.
- कोई कमांड प्रॉम्प्ट खोलें और उस डायरेक्ट्री पर जाएं जहां adb टूल मौजूद हैं.
हीप डंप कैप्चर करने के लिए, यह कमांड चलाएं :
adb shell am dumpheap my.app.name $PHONE_FILE_OUTहीप डंप को वापस पाने के लिए, यह निर्देश चलाएं:
adb pull $PHONE_FILE_OUT $LOCAL_FILE.
Android Studio का इस्तेमाल करके हीप डंप कैप्चर करना
Android Studio के मेमोरी प्रोफ़ाइलर का इस्तेमाल करके हीप डंप कैप्चर करने के लिए, Android के हीप डंप कैप्चर करें सेक्शन में दिया गया यह तरीका अपनाएं.
मेमोरी लीक का पता लगाने के लिए, हीप डंप का विश्लेषण करना
हीप डंप कैप्चर करने के बाद, उसका विश्लेषण करने के लिए Android Studio के मेमोरी प्रोफ़ाइलर का इस्तेमाल किया जा सकता है. ऐसा करने के लिए, यह तरीका अपनाएं:
Android Studio में अपना Android प्रोजेक्ट खोलें.
Run को चुनें. इसके बाद, Debug कॉन्फ़िगरेशन को चुनें.
Android Profiler टैब खोलें.
जानकारी याद रखने की सुविधा को चुनें.
Open heap dump को चुनें. इसके बाद, जनरेट की गई हीप डंप फ़ाइल को चुनें. मेमोरी प्रोफ़ाइलर, आपके ऐप्लिकेशन की मेमोरी के इस्तेमाल का ग्राफ़ दिखाता है.
हीप डंप का विश्लेषण करने के लिए, ग्राफ़ का इस्तेमाल करें:
उन ऑब्जेक्ट की पहचान करें जिनका अब इस्तेमाल नहीं किया जा रहा है.
ज़्यादा मेमोरी का इस्तेमाल करने वाले ऑब्जेक्ट की पहचान करना.
देखें कि हर ऑब्जेक्ट कितनी मेमोरी का इस्तेमाल कर रहा है.
इस जानकारी का इस्तेमाल करके, मेमोरी लीक के सोर्स को ढूंढें या उसे कम करें और उसे ठीक करें.
पांचवां चरण: मेमोरी लीक की समस्या ठीक करना
मेमोरी लीक के सोर्स का पता चलने के बाद, उसे ठीक किया जा सकता है. Android ऐप्लिकेशन में मेमोरी लीक की समस्या को ठीक करने से, ऐप्लिकेशन की परफ़ॉर्मेंस और स्थिरता को बेहतर बनाने में मदद मिलती है. स्थिति के हिसाब से, जानकारी अलग-अलग होती है. हालांकि, इन सुझावों से आपको मदद मिल सकती है:
पक्का करें कि आपका ऐप्लिकेशन, Android के विषय अपने ऐप्लिकेशन की मेमोरी मैनेज करें के सुझाव के मुताबिक, मेमोरी को ऐलोकेट और डीऐलोकेट करता हो.
अपने ऐप्लिकेशन से, इस्तेमाल न किए गए कोड या संसाधनों को हटाएं. Android ऐप्लिकेशन के बारे में ज़्यादा जानने के लिए, Android ऐप्लिकेशन के लिए सबसे सही तरीके देखें.
डीबग करने के अन्य टूल
इन चरणों को पूरा करने के बाद, अगर आपको अब भी मेमोरी लीक की समस्या नहीं मिली है और उसे ठीक नहीं किया गया है, तो ये टूल आज़माएं:
- एलोकेशन ट्रैकिंग की मदद से, नेटिव कोड में मेमोरी को डीबग करना.
- LeakCanary की मदद से, मेमोरी लीक का पता लगाना.
एलोकेशन ट्रैकिंग की मदद से, नेटिव कोड में मेमोरी को डीबग करना
भले ही, सीधे तौर पर नेटिव कोड का इस्तेमाल न किया जा रहा हो, लेकिन Android की कई सामान्य लाइब्रेरी इसका इस्तेमाल करती हैं. इनमें Google SDK टूल भी शामिल हैं. अगर आपको लगता है कि मेमोरी लीक की समस्या नेटिव कोड में है, तो इसे डीबग करने के लिए कई टूल इस्तेमाल किए जा सकते हैं. Android Studio या heapprofd (Perfetto के साथ भी काम करता है) की मदद से, ऐलोकेशन को ट्रैक करके मेमोरी लीक की संभावित वजहों का पता लगाया जा सकता है. साथ ही, यह डीबग करने का सबसे तेज़ तरीका है.
एलोकेशन ट्रैकिंग का एक और फ़ायदा यह है कि इसकी मदद से, हीप में मौजूद संवेदनशील जानकारी को शामिल किए बिना, नतीजों को शेयर किया जा सकता है.
LeakCanary की मदद से, लीक का पता लगाना
LeakCanary, Android ऐप्लिकेशन में मेमोरी लीक की पहचान करने के लिए एक बेहतरीन टूल है. अपने ऐप्लिकेशन में LeakCanary इस्तेमाल करने के तरीके के बारे में ज़्यादा जानने के लिए, LeakCanary पर जाएं.
Google के SDK टूल से जुड़ी समस्याओं की शिकायत करने का तरीका
अगर आपने इस दस्तावेज़ में बताए गए तरीके आज़माए हैं और आपको लगता है कि हमारे एसडीके में मेमोरी लीक की समस्या है, तो ग्राहक सहायता टीम से संपर्क करें. साथ ही, ज़्यादा से ज़्यादा जानकारी दें:
मेमोरी लीक की समस्या को फिर से पैदा करने का तरीका. अगर समस्या को दोहराने के लिए जटिल कोडिंग की ज़रूरत है, तो समस्या को दोहराने वाले कोड को हमारे सैंपल के तौर पर मिले ऐप्लिकेशन में कॉपी करें. साथ ही, यूज़र इंटरफ़ेस (यूआई) में समस्या को ट्रिगर करने के लिए ज़रूरी अन्य चरणों की जानकारी दें.
आपके ऐप्लिकेशन से कैप्चर किए गए हीप डंप, जिनमें समस्या को फिर से जनरेट किया गया है. दो अलग-अलग समय पर हीप डंप कैप्चर करें. इससे पता चलता है कि मेमोरी के इस्तेमाल में काफ़ी बढ़ोतरी हुई है.
अगर नेटिव मेमोरी लीक होने की आशंका है, तो heapprofd से ऐलोकेशन ट्रैकिंग आउटपुट शेयर करें.
लीक की स्थिति को फिर से बनाने के बाद, गड़बड़ी की रिपोर्ट जनरेट की गई हो.
मेमोरी से जुड़ी किसी भी समस्या की वजह से हुए क्रैश के स्टैक ट्रेस.
अहम जानकारी: मेमोरी से जुड़ी समस्या को डीबग करने के लिए, आम तौर पर स्टैक ट्रेस काफ़ी नहीं होते. इसलिए, पक्का करें कि आपने अन्य फ़ॉर्मैट में भी जानकारी दी हो.