2011-10-18 27 views
8

मैं एक स्मृति रिसाव समस्या की जांच करने ग्रहण में मेट उपकरण का उपयोग किया और पाया कि, कभी कभी, एक CookieSyncManager धागा उदाहरण मेरे गतिविधि लीक। जीसी जड़ तक मेरी गतिविधि से मार्ग का अनुसरण है:CookieSyncManager के कारण मेमोरी लीक (गतिविधि रिसाव)?

com.mycompany.myapp.MyActivity 
    --> mContext com.android.internal.policy.impl.PhoneFallbackEventHandler 
    --> mFallbackEventHandler android.view.ViewRoot 
     --> target android.os.Message 
     --> <java local> java.lang.Thread CookieSyncManager Thread 

MyActivity CookieSyncManager.createInstance कहा जाता है (this.getApplicationContext()); ऑनक्रेट() में, लेकिन यह किसी भी वेबदृश्य का उपयोग नहीं करता है। इसमें केवल कुछ एनिमेशन शामिल हैं। मुझे समझ में नहीं आता कि यह कुकी सिंक मैनेजर द्वारा क्यों लीक किया गया है। क्या कोई मदद कर सकता है?

धन्यवाद।

+0

किसी भी वेबव्यू ...? – Blackbelt

+0

कोई वेबदृश्य नहीं। CookieSyncManager अन्य गतिविधि द्वारा उपयोग किया जाता है, लेकिन यह गतिविधि नहीं। – Kai

+0

मैं हार मानता हूं .. क्षमा करें – Blackbelt

उत्तर

1

आप CookieSyncManager.createInstance कह सकते हैं (this.getApplicationContext()); एक संदर्भ रैपर का उपयोग करना जो वास्तविक संदर्भ में केवल कमजोर पड़ता है।

इस तरह के एक मामले में आप जो स्वचालित रूप से इसे करने के लिए जब वहाँ एक कोई अन्य मजबूत संदर्भ साफ कर दिया जाएगा दुर्बलता से संदर्भित संदर्भ के लिए सभी कॉल प्रतिनिधि होगा। बस इस तरह के वास्तविक संदर्भ तक पहुंचने से पहले सुनिश्चित करें कि आप एक शून्य जांच करते हैं।

Context realContext = mMyWeakReference.get(); 
if (realContext != null) { 
    // delegate call to real context 
    realContext.delegateToWhateverFunctionWasCalled(); 
} 

स्थानीय चर में इसे संग्रहीत करना महत्वपूर्ण है और जब आपका कोड चलता है तो संदर्भ साफ़ हो जाता है तो एक एनपी को रोक सकता है।

इस थोड़े, एक संभावित ढांचे मुद्दे की तरह लग रहा है, हालांकि यदि ढांचे थोड़ी देर बाद इस संदर्भ को साफ करता है यह भी ठीक होना चाहिए। और उस स्थिति में यह वास्तव में एक वास्तविक मुद्दा नहीं हो सकता है, केवल एक झूठी सकारात्मक।

संबंधित मुद्दे