मुझे वास्तव में यकीन नहीं है कि अगर setHasStableId
ध्वज का उपयोग आपकी समस्या को ठीक करने वाला है। आपके द्वारा प्रदान की जाने वाली जानकारी के आधार पर आप अपने प्रदर्शन के मुद्दे को किसी स्मृति समस्या से संबंधित हो सकते हैं। उपयोगकर्ता इंटरफ़ेस और मेमोरी के संदर्भ में आपका एप्लिकेशन प्रदर्शन काफी संबंधित है।
पिछले हफ्ते मुझे पता चला कि मेरा ऐप मेमोरी लीक कर रहा था। मुझे यह पता चला क्योंकि अपने ऐप का उपयोग करने के 20 मिनट बाद मैंने देखा कि UI वास्तव में धीमी गति से प्रदर्शन कर रहा था। किसी गतिविधि को बंद करना / खोलना या तत्वों के एक समूह के साथ एक RecyclerView को स्क्रॉल करना वास्तव में धीमा था। Http://flowup.io/ के उपयोग से उत्पादन में अपने कुछ उपयोगकर्ताओं की निगरानी के बाद मैंने यह पाया:
फ्रेम समय वास्तव में बहुत अधिक था और फ्रेम प्रति सेकंड वास्तव में बहुत कम था। आप देख सकते हैं कि रेंडर करने के लिए 2 सेकंड के बारे में कुछ फ्रेम की जरूरत है: एस।
यह पता लगाने की कोशिश कर रहा है कि इस खराब फ्रेम समय के कारण क्या था / एफपीएस मुझे पता चला कि मेरे पास एक मेमोरी मुद्दा था जैसा कि आप यहां देख सकते हैं:
यहां तक कि जब एक ही समय में औसत मेमोरी खपत 15 एमबी के करीब थी, तो ऐप फ्रेम को छोड़ रहा था।
यही कारण है कि मैंने यूआई मुद्दे की खोज की है। मेरे ऐप में मेमोरी लीक होने के कारण बहुत सारे कचरा संग्रहकर्ता घटनाएँ हो रही हैं और इससे यूआई का प्रदर्शन खराब हो रहा है क्योंकि एंड्रॉइड वीएम को हर एक फ्रेम में मेमोरी इकट्ठा करने के लिए मेरे ऐप को बंद करना पड़ा।
कोड को देखते हुए मेरे पास एक कस्टम दृश्य के अंदर एक रिसाव था क्योंकि मैं एंड्रॉइड कोरियोग्राफर उदाहरण से एक श्रोता को अपंजीकृत नहीं कर रहा था। फिक्स जारी करने के बाद, सब कुछ सामान्य हो गया :)
यदि आपका ऐप एक मेमोरी इश्यू के कारण फ़्रेम को छोड़ रहा है, तो आपको दो सामान्य त्रुटियों की समीक्षा करनी चाहिए:
समीक्षा करें कि क्या आपका ऐप एक विधि के अंदर वस्तुओं को प्रति सेकंड कई बार आह्वान कर आवंटित कर रहा है। भले ही यह आवंटन किसी अन्य स्थान पर किया जा सकता है जहां आपका आवेदन धीमा हो रहा है। एक उदाहरण आपके पुनर्नवीनीकरण दृश्य दृश्य धारक में onBindViewHolder पर onDraw कस्टम दृश्य विधि के अंदर किसी ऑब्जेक्ट के नए उदाहरण बना सकता है। समीक्षा करें कि क्या आपका ऐप Android SDK में एक उदाहरण दर्ज कर रहा है, लेकिन इसे जारी नहीं कर रहा है। एक श्रोता को बस कार्यक्रम में पंजीकृत करना भी संभव रिसाव हो सकता है।
डिस्क्लेमर: मेरे ऐप को मॉनिटर करने के लिए मैं जिस टूल का इस्तेमाल कर रहा हूं, वह डेवलपमेंट के तहत है। इस उपकरण तक मेरी पहुंच है क्योंकि मैं डेवलपर्स में से एक हूं :) यदि आप इस उपकरण तक पहुंच चाहते हैं तो हम जल्द ही एक बीटा संस्करण जारी करेंगे! आप हमारी वेब साइट में शामिल हो सकते हैं: http://flowup.io/ ।
यदि आप विभिन्न उपकरणों का उपयोग करना चाहते हैं, तो आप उपयोग कर सकते हैं: यात्रा-वृत्तांत, dmtracedump, systrace या Andorid प्रदर्शन मॉनिटर Android स्टूडियो में एकीकृत। लेकिन याद रखें कि यह उपकरण आपके कनेक्ट किए गए डिवाइस की निगरानी करेगा न कि आपके अन्य उपयोगकर्ता उपकरणों या Android OS इंस्टॉलेशन के।