इस दस्तावेज़ में यह माना गया है कि आपने मेमोरी मैनेजमेंट के तहत, Android ऐप्लिकेशन के लिए सबसे सही तरीके अपनाए हैं. जैसे, अपने ऐप्लिकेशन की मेमोरी मैनेज करना.
परिचय
मेमोरी लीक एक तरह का रिसॉर्स लीक है. यह तब होता है, जब कोई कंप्यूटर प्रोग्राम, आवंटित की गई ऐसी मेमोरी को रिलीज़ नहीं करता जिसकी अब ज़रूरत नहीं है. मेमोरी लीक होने पर, ऐप्लिकेशन ऑपरेटिंग सिस्टम से ज़्यादा मेमोरी का अनुरोध कर सकता है. इससे ऐप्लिकेशन क्रैश हो सकता है. Android ऐप्लिकेशन में मेमोरी लीक होने की कई वजहें हो सकती हैं. जैसे, संसाधनों को सही तरीके से रिलीज़ न करना या अब ज़रूरत न होने पर, लिसनर को अनरजिस्टर न करना.
इस दस्तावेज़ में, आपको कुछ सबसे सही तरीके बताए गए हैं. इनकी मदद से, अपने कोड में मेमोरी लीक होने से रोका जा सकता है, इसका पता लगाया जा सकता है, और इसे ठीक किया जा सकता है. अगर आपने इस दस्तावेज़ में बताए गए तरीके आज़मा लिए हैं और आपको लगता है कि हमारे एसडीके टूल में मेमोरी लीक हो रही है, तो Google के एसडीके टूल से जुड़ी समस्याओं की शिकायत करने का तरीका देखें.
सहायता टीम से संपर्क करने से पहले
Google की सहायता टीम को मेमोरी लीक की शिकायत करने से पहले, इस दस्तावेज़ में बताए गए डीबग करने के तरीके और सबसे सही तरीके अपनाएं. इससे यह पक्का किया जा सकेगा कि गड़बड़ी आपके कोड में नहीं है. इन तरीकों से आपकी समस्या हल हो सकती है. अगर ऐसा नहीं होता है, तो इनसे वह जानकारी जनरेट होती है जिसकी ज़रूरत Google की सहायता टीम को आपकी मदद करने के लिए होती है.
मेमोरी लीक होने से रोकना
Google के एसडीके टूल का इस्तेमाल करने वाले कोड में, मेमोरी लीक होने की कुछ सबसे आम वजहों से बचने के लिए, ये सबसे सही तरीके अपनाएं.
Android ऐप्लिकेशन के लिए सबसे सही तरीके
पक्का करें कि आपने अपने Android ऐप्लिकेशन में ये सभी काम किए हों:
- इस्तेमाल न किए गए संसाधन रिलीज़ करें.
- अब ज़रूरत न होने पर, लिसनर को अनरजिस्टर करें.
- अब ज़रूरत न होने पर, टास्क रद्द करें.
- संसाधन रिलीज़ करने के लिए, लाइफ़साइकल के तरीकों को फ़ॉरवर्ड करें.
- एसडीके टूल के नए वर्शन इस्तेमाल करें.
- एएनआर की गड़बड़ी से बचने के लिए, शुरू करने के दौरान मुख्य थ्रेड को ब्लॉक न करें एएनआर.
इनमें से हर तरीके के बारे में ज़्यादा जानकारी पाने के लिए, यहां दिए गए सेक्शन देखें.
इस्तेमाल न किए गए संसाधन रिलीज़ करना
जब आपका Android ऐप्लिकेशन किसी संसाधन का इस्तेमाल करता है, तो पक्का करें कि अब ज़रूरत न होने पर, उसे रिलीज़ कर दिया जाए. अगर ऐसा नहीं किया जाता है, तो ऐप्लिकेशन के बंद होने के बाद भी, वह संसाधन मेमोरी में बना रहता है. ज़्यादा जानकारी के लिए, गतिविधि के लाइफ़साइकल की समीक्षा करें.
GeoSDK में, GoogleMap के पुराने रेफ़रंस रिलीज़ करना
आम तौर पर, GoogleMap को NavigationView या MapView का इस्तेमाल करके कैश करने पर, मेमोरी लीक हो सकती है. 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 के दस्तावेज़ में अपने ऐप्लिकेशन की मेमोरी मैनेज करना देखें.
संसाधन रिलीज़ करने के लिए, लाइफ़साइकल के तरीकों को फ़ॉरवर्ड करना
अगर आपका ऐप्लिकेशन, Navigation या 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 के एसडीके टूल को नई सुविधाओं, गड़बड़ियों को ठीक करने वाले अपडेट, और परफ़ॉर्मेंस में सुधार के साथ लगातार अपडेट किया जाता है. इन अपडेट को पाने के लिए, अपने ऐप्लिकेशन में मौजूद एसडीके टूल को अप-टू-डेट रखें.
एएनआर की गड़बड़ी से बचने के लिए, शुरू करने के दौरान मुख्य थ्रेड को ब्लॉक न करना
जब कोई ऐप्लिकेशन, मुख्य थ्रेड को ज़्यादा समय तक ब्लॉक करता है, तो "ऐप्लिकेशन जवाब नहीं दे रहा है" (एएनआर) की गड़बड़ी हो सकती है. एएनआर की गड़बड़ी से बचने के लिए, लाइफ़साइकल के तरीकों को जितना हो सके उतना हल्का रखें. जैसे, onCreate(). इसके लिए, लंबे समय तक चलने वाले टास्क को बाद के लिए टालें या उन्हें मुख्य थ्रेड से बाहर चलाएं.
एसडीके टूल को शुरू करने से जुड़ी एएनआर की गड़बड़ियों से बचने के लिए:
- एक बार में सिर्फ़ एक मैप इंस्टेंस बनाएं.
- मैप को इंस्टैंशिएट करते समय, यूज़र इंटरफ़ेस (यूआई) थ्रेड पर जितना हो सके उतना कम काम करें.
मेमोरी लीक को डीबग करना
अगर इस दस्तावेज़ में पहले दिए गए सभी सुझावों को लागू करने के बाद भी, आपको मेमोरी लीक दिखती है, तो डीबग करने के लिए यह तरीका अपनाएं.
शुरू करने से पहले, आपको यह पता होना चाहिए कि Android, मेमोरी को कैसे मैनेज करता है. ज़्यादा जानकारी के लिए, Android में मेमोरी मैनेजमेंट की खास जानकारी पढ़ें.
मेमोरी लीक को डीबग करने के लिए, यह तरीका अपनाएं:
- समस्या को दोबारा हल करें. डीबग करने के लिए, यह चरण ज़रूरी है.
- देखें कि मेमोरी का इस्तेमाल, उम्मीद के मुताबिक है या नहीं. देखें कि मेमोरी का बढ़ा हुआ इस्तेमाल, आपके ऐप्लिकेशन को चलाने के लिए ज़रूरी मेमोरी तो नहीं है. ऐसा न हो कि आपको यह मेमोरी लीक लग रही हो.
- बड़े लेवल पर डीबग करें. डीबग करने के लिए, कई यूटिलिटी का इस्तेमाल किया जा सकता है. Android में मेमोरी से जुड़ी समस्याओं को डीबग करने के लिए, तीन अलग-अलग स्टैंडर्ड टूल सेट उपलब्ध हैं: Android Studio, Perfetto, और Android डीबग ब्रिज (adb) कमांड लाइन यूटिलिटी.
- अपने ऐप्लिकेशन की मेमोरी का इस्तेमाल देखें. हीप डंप और ऐलोकेशन ट्रैकिंग पाएं. इसके बाद, इसका विश्लेषण करें.
- मेमोरी लीक ठीक करें.
इन चरणों के बारे में ज़्यादा जानकारी, यहां दी गई है.
पहला चरण: समस्या को दोबारा हल करना
अगर आपको समस्या को दोबारा हल करने में परेशानी हो रही है, तो पहले उन स्थितियों के बारे में सोचें जिनकी वजह से मेमोरी लीक हो सकती है. अगर आपको पता है कि समस्या को दोबारा हल किया गया है, तो सीधे हीप डंप को देखना काम आ सकता है. हालांकि, अगर आपको ऐप्लिकेशन शुरू होने पर या किसी अन्य समय पर हीप डंप मिलता है, तो हो सकता है कि आपने लीक को ट्रिगर करने वाली स्थितियां चालू न की हों. समस्या को दोबारा हल करने की कोशिश करते समय, अलग-अलग स्थितियों को आज़माएं:
सुविधाओं का कौनसा सेट चालू है?
उपयोगकर्ता की किन कार्रवाइयों की वजह से लीक ट्रिगर होता है?
- क्या आपने इस क्रम को कई बार चालू करने की कोशिश की है?
ऐप्लिकेशन, लाइफ़साइकल की किन स्थितियों से गुज़रा है?
- क्या आपने लाइफ़साइकल की अलग-अलग स्थितियों को कई बार आज़माया है?
पक्का करें कि एसडीके टूल के नए वर्शन में, समस्या को दोबारा हल किया जा सके. हो सकता है कि पिछले वर्शन की समस्या पहले ही ठीक कर दी गई हो.
दूसरा चरण: देखें कि ऐप्लिकेशन की मेमोरी का इस्तेमाल, उम्मीद के मुताबिक है या नहीं
हर सुविधा के लिए, ज़्यादा मेमोरी की ज़रूरत होती है. अलग-अलग स्थितियों को डीबग करते समय, देखें कि यह इस्तेमाल, उम्मीद के मुताबिक है या नहीं. साथ ही, यह भी देखें कि यह असल में मेमोरी लीक है या नहीं. उदाहरण के लिए, अलग-अलग सुविधाओं या उपयोगकर्ता के टास्क के लिए, इन संभावनाओं पर विचार करें:
संभव है कि यह लीक हो: अलग-अलग स्थितियों को कई बार आज़माने पर, समय के साथ मेमोरी का इस्तेमाल बढ़ता जाता है.
संभव है कि यह मेमोरी का उम्मीद के मुताबिक इस्तेमाल हो: स्थिति बंद होने के बाद, मेमोरी वापस मिल जाती है.
संभव है कि यह मेमोरी का उम्मीद के मुताबिक इस्तेमाल हो: कुछ समय के लिए मेमोरी का इस्तेमाल बढ़ता है और फिर कम हो जाता है. ऐसा, बाउंडेड कैश या मेमोरी के उम्मीद के मुताबिक इस्तेमाल की वजह से हो सकता है.
अगर ऐप्लिकेशन का व्यवहार, मेमोरी के उम्मीद के मुताबिक इस्तेमाल जैसा है, तो अपने ऐप्लिकेशन की मेमोरी मैनेज करके, समस्या को हल किया जा सकता है. मदद के लिए, अपने ऐप्लिकेशन की मेमोरी मैनेज करना देखें.
तीसरा चरण: बड़े लेवल पर डीबग करना
मेमोरी लीक को डीबग करते समय, बड़े लेवल से शुरू करें. इसके बाद, संभावनाओं को कम करने के बाद, ज़्यादा जानकारी के लिए डीबग करें. सबसे पहले, यह विश्लेषण करने के लिए, बड़े लेवल पर डीबग करने वाले इनमें से किसी एक टूल का इस्तेमाल करें कि समय के साथ लीक हो रहा है या नहीं:
Android Studio का मेमोरी प्रोफ़ाइलर (सुझाया गया)
Android Studio का मेमोरी प्रोफ़ाइलर
यह टूल, इस्तेमाल की गई मेमोरी का विज़ुअल हिस्टोग्राम दिखाता है. इसी इंटरफ़ेस से, हीप डंप और ऐलोकेशन ट्रैकिंग को भी ट्रिगर किया जा सकता है. इस टूल का सुझाव डिफ़ॉल्ट रूप से दिया जाता है. ज़्यादा जानकारी के लिए, Android Studio का मेमोरी प्रोफ़ाइलर देखें.
Perfetto के मेमोरी काउंटर
Perfetto, कई मेट्रिक को ट्रैक करने की सटीक सुविधा देता है. साथ ही, यह सभी मेट्रिक को एक ही हिस्टोग्राम में दिखाता है. ज़्यादा जानकारी के लिए, Perfetto के मेमोरी काउंटर देखें.

Android डीबग ब्रिज (adb) कमांड लाइन यूटिलिटी
Perfetto की मदद से ट्रैक की जा सकने वाली ज़्यादातर चीज़ें, adb कमांड लाइन यूटिलिटी के तौर पर भी उपलब्ध हैं. इनसे सीधे क्वेरी की जा सकती है. यहां कुछ अहम उदाहरण दिए गए हैं:
Meminfo की मदद से, किसी खास समय पर मेमोरी की ज़्यादा जानकारी देखी जा सकती है.
Procstats, समय के साथ इकट्ठा किए गए कुछ अहम आंकड़े दिखाता है.
यहां देखने के लिए, सबसे अहम आंकड़ा यह है कि समय के साथ, ऐप्लिकेशन को ज़्यादा से ज़्यादा कितनी फ़िज़िकल मेमोरी की ज़रूरत होती है. इसे maxRSS कहा जाता है. MaxPSS उतना सटीक नहीं हो सकता. सटीकता बढ़ाने के लिए, adb shell dumpsys procstats --help –start-testing फ़्लैग देखें.
ऐलोकेशन ट्रैकिंग
ऐलोकेशन ट्रैकिंग से, उस स्टैक ट्रेस की पहचान की जाती है जहां मेमोरी को ऐलोकेट किया गया था. साथ ही, यह भी पता चलता है कि मेमोरी को रिलीज़ किया गया था या नहीं. यह चरण, खास तौर पर नेटिव कोड में लीक को ट्रैक करने के लिए काम का है. यह टूल, स्टैक ट्रेस की पहचान करता है. इसलिए, यह असली वजह को जल्दी से डीबग करने या समस्या को दोबारा हल करने का तरीका जानने का एक शानदार ज़रिया हो सकता है. ऐलोकेशन ट्रैकिंग का इस्तेमाल करने के तरीके जानने के लिए, ऐलोकेशन ट्रैकिंग की मदद से नेटिव कोड में मेमोरी को डीबग करना देखें.
चौथा चरण: हीप डंप की मदद से, अपने ऐप्लिकेशन की मेमोरी का इस्तेमाल देखना
मेमोरी लीक का पता लगाने का एक तरीका यह है कि अपने ऐप्लिकेशन का हीप डंप पाएं. इसके बाद, लीक के लिए इसकी जांच करें. हीप डंप , किसी ऐप्लिकेशन की मेमोरी में मौजूद सभी ऑब्जेक्ट का स्नैपशॉट होता है. इसका इस्तेमाल, मेमोरी लीक और मेमोरी से जुड़ी अन्य समस्याओं का पता लगाने के लिए किया जा सकता है.
Android Studio, मेमोरी लीक का पता लगा सकता है. हालांकि, जीसी इन्हें ठीक नहीं कर सकता. हीप डंप कैप्चर करने पर, Android Studio यह देखता है कि कोई ऐसी गतिविधि या फ़्रैगमेंट है या नहीं जिसे अब भी ऐक्सेस किया जा सकता है, लेकिन उसे पहले ही बंद कर दिया गया है.
ज़्यादा जानकारी के लिए, यहां दिए गए सेक्शन देखें.
हीप डंप कैप्चर करना
हीप डंप कैप्चर करने के लिए, Android डीबग ब्रिज (adb) या Android Studio के मेमोरी प्रोफ़ाइलर का इस्तेमाल किया जा सकता है.
हीप डंप कैप्चर करने के लिए, 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 प्रोजेक्ट खोलें.
चलाएं को चुनें. इसके बाद, डीबग करें कॉन्फ़िगरेशन को चुनें.
Android प्रोफ़ाइलर टैब खोलें.
मेमोरी को चुनें.
हीप डंप खोलें को चुनें. इसके बाद, जनरेट की गई हीप डंप फ़ाइल को चुनें. मेमोरी प्रोफ़ाइलर, आपके ऐप्लिकेशन की मेमोरी के इस्तेमाल का ग्राफ़ दिखाता है.
हीप डंप का विश्लेषण करने के लिए, ग्राफ़ का इस्तेमाल करें:
ऐसे ऑब्जेक्ट की पहचान करें जिनका अब इस्तेमाल नहीं किया जा रहा है.
ऐसे ऑब्जेक्ट की पहचान करें जो ज़्यादा मेमोरी का इस्तेमाल करते हैं.
देखें कि हर ऑब्जेक्ट कितनी मेमोरी का इस्तेमाल कर रहा है.
इस जानकारी का इस्तेमाल करके, मेमोरी लीक के सोर्स को कम करें या ढूंढें. इसके बाद, इसे ठीक करें.
पांचवां चरण: मेमोरी लीक ठीक करना
मेमोरी लीक के सोर्स की पहचान करने के बाद, इसे ठीक किया जा सकता है. अपने Android ऐप्लिकेशन में मेमोरी लीक ठीक करने से, उनकी परफ़ॉर्मेंस और स्थिरता बेहतर होती है. स्थिति के हिसाब से, जानकारी अलग-अलग होती है. हालांकि, यहां दिए गए सुझावों से मदद मिल सकती है:
पक्का करें कि आपका ऐप्लिकेशन, Android के विषय अपने ऐप्लिकेशन की मेमोरी मैनेज करना में दिए गए सुझाव के मुताबिक, मेमोरी को ऐलोकेट और डीऐलोकेट करता हो.
अपने ऐप्लिकेशन से, इस्तेमाल न किए गए कोड या संसाधन हटाएं. Android ऐप्लिकेशन के बारे में ज़्यादा जानकारी के लिए, Android ऐप्लिकेशन के लिए सबसे सही तरीके देखें.
डीबग करने के अन्य टूल
इन चरणों को पूरा करने के बाद भी, अगर आपको मेमोरी लीक नहीं मिली है और आपने इसे ठीक नहीं किया है, तो इन टूल को आज़माएं:
- ऐलोकेशन ट्रैकिंग की मदद से नेटिव कोड में मेमोरी को डीबग करना.
- LeakCanary की मदद से लीक की पहचान करना.
ऐलोकेशन ट्रैकिंग की मदद से नेटिव कोड में मेमोरी को डीबग करना
भले ही, आपने सीधे तौर पर नेटिव कोड का इस्तेमाल न किया हो, लेकिन Google के एसडीके टूल के साथ-साथ, Android की कई सामान्य लाइब्रेरी भी इसका इस्तेमाल करती हैं. अगर आपको लगता है कि मेमोरी लीक, नेटिव कोड में हो रही है, तो इसे डीबग करने के लिए, कई टूल का इस्तेमाल किया जा सकता है. Android Studio या heapprofd (Perfetto के साथ भी काम करता है) की मदद से ऐलोकेशन ट्रैकिंग, मेमोरी लीक की संभावित वजहों की पहचान करने का एक शानदार तरीका है. साथ ही, यह अक्सर डीबग करने का सबसे तेज़ तरीका होता है.
ऐलोकेशन ट्रैकिंग का एक और फ़ायदा यह है कि इससे नतीजों को शेयर किया जा सकता है. इसके लिए, हीप में मौजूद संवेदनशील जानकारी को शामिल करने की ज़रूरत नहीं होती.
LeakCanary की मदद से लीक की पहचान करना
LeakCanary, Android ऐप्लिकेशन में मेमोरी लीक की पहचान करने का एक बेहतरीन टूल है. अपने ऐप्लिकेशन में LeakCanary का इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, LeakCanary पर जाएं.
Google के एसडीके टूल से जुड़ी समस्याओं की शिकायत करने का तरीका
अगर आपने इस दस्तावेज़ में बताए गए तरीके आज़मा लिए हैं और आपको लगता है कि हमारे एसडीके टूल में मेमोरी लीक हो रही है, तो ग्राहक सहायता टीम से संपर्क करें. साथ ही, यहां दी गई ज़्यादा से ज़्यादा जानकारी दें:
मेमोरी लीक को दोबारा हल करने का तरीका. अगर तरीके के लिए, जटिल कोडिंग की ज़रूरत है, तो समस्या को दोहराने वाले कोड को हमारे सैंपल ऐप्लिकेशन में कॉपी करें. साथ ही, लीक को ट्रिगर करने के लिए, यूज़र इंटरफ़ेस (यूआई) में किए जाने वाले अन्य चरणों की जानकारी दें.
आपके ऐप्लिकेशन से कैप्चर किए गए हीप डंप. इनमें समस्या को दोबारा हल किया गया हो. दो अलग-अलग समय पर हीप डंप कैप्चर करें. इनसे पता चलता है कि मेमोरी का इस्तेमाल काफ़ी बढ़ गया है.
अगर नेटिव मेमोरी लीक होने की संभावना है, तो ऐलोकेशन ट्रैकिंग का आउटपुट heapprofd से शेयर करें.
गड़बड़ी की रिपोर्ट . यह रिपोर्ट, लीक की स्थिति को दोबारा हल करने के बाद ली गई हो.
मेमोरी से जुड़े किसी भी क्रैश के स्टैक ट्रेस.
अहम जानकारी: स्टैक ट्रेस, आम तौर पर मेमोरी की समस्या को डीबग करने के लिए काफ़ी नहीं होते. इसलिए, पक्का करें कि आपने जानकारी का कोई अन्य फ़ॉर्म भी दिया हो.