देखें पदानुक्रम निम्नानुसार है TabActivity
->ActivityGroups
->Activities
।इनपुट मोड मैनेजर टैबहोस्ट का संदर्भ रखता है - मेमोरी लीक - ओओएम त्रुटि
मेट का उपयोग करते हुए मैंने पाया कि TabWidget
TabHost
जो InputMethodManager
द्वारा संदर्भित है द्वारा संदर्भित है, इसलिए TabWidget
लीक कर रहा है। आवेदन के बाद के लॉन्च पर आउटऑफमेमरी त्रुटि फेंक दी गई है।
इसी प्रकार मेरी सभी गतिविधियों का भी InputMethodManager
द्वारा संदर्भित किया गया है। ठीक से आवेदन परिष्करण पर
(वापस कुंजी मार) (आवेदन अपने सभी activitygroups, गतिविधियों, tabactivity, tabhost और tabwidget लीक कर रहे हैं !! बंद करने के बाद), निम्नलिखित logcat में दिखाया गया है
चेतावनी/InputManagerService (99): गैर ध्यान केंद्रित ग्राहक [email protected] पर इनपुट शुरू (uid = 10052 पीआईडी = 1463)
InputMethodManager
से संदर्भ को हटाने के लिए कैसे .. ।?
बात मैंने कोशिश की:
ए इस विधि कहा जाता है मेरी TabActivity
1. myTabWidget.removeAllViews()
2. myTabWidger.invalidate()
कोई किस्मत की onDestroy
!
- पहले से ही तैनात सवाल: Main Activity is not garbage collected after destruction because it is referenced by InputMethodManager indirectly
मैं InputMethodManager वैसे भी उल्लेख नहीं है (FYI करें, मैं एक बिंदु पर दो TabActivities देखने के लिए सक्षम था, लेकिन समस्या InputMethodManager नहीं था, यह कोड में एक स्थिर संदर्भ) था। क्या आप मुझे लिंक प्रदान कर सकते हैं जो "पैटर्न पर्यवेक्षक" के बारे में अधिक बताता है? – Mani
http://en.wikipedia.org/wiki/Observer_pattern हमने पर्यवेक्षक (विषय) के रूप में एक मॉडल बनाया, और गतिविधियां पर्यवेक्षक थे (उन्होंने इंटरफ़ेस "पर्यवेक्षक" लागू किया)। शुरुआत में, गतिविधि मॉडल में खुद पंजीकृत है (हम सिंगलटन का उपयोग करते हैं, लेकिन आप सेवा या एप्लिकेशन का उपयोग कर सकते हैं)। अगर कुछ रोचक, अवलोकन करने योग्य घटना थी और प्रत्येक ग्राहक को अधिसूचित किया गया था। नष्ट करने से पहले, स्मृति स्मृति रिसाव से बचने के लिए स्वयं को पर्यवेक्षित में अनियंत्रित कर दिया गया। एंड्रॉइड में मेमोरी रिसाव के अधिकांश कारण बहुत सरल हैं: संदर्भ/दृश्य/संवाद कहीं स्थैतिक तरीके से घोषित किए गए थे। – QuickNick