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

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