रिसाव मैं अपने आवेदन में स्मृति लीकेज का पता करने के लिए एक उपकरण leakcanary उपयोग कर रहे हैं। ऐसा लगता है कि मेरी वेबव्यूएक्टिविटी हर बार लीक होती है।LeakCanary स्पॉट Android WebView, स्मृति
मैंने रिसावों का परीक्षण करने के लिए एक सरल आवेदन बनाया। मैं xml लेआउट फ़ाइल/गतिविधि संदर्भ के साथ inflate के अंदर एक वेबव्यू के साथ एक गतिविधि शुरू करते हैं। जेएस ऑफ सबकुछ डिफ़ॉल्ट वेबव्यू के भीतर एक सरल वेब व्यू क्लाइंट रीडायरेक्शन रखने की अपेक्षा करता है। यह हर बार रिसाव करता है।
मैं अनुसंधान के बहुत सारे किया है, इसे रोकने के लिए एक ही रास्ता किसी अन्य प्रक्रिया के साथ WebViewActivity शुरू करने और OnDestroy अंदर मारने है। लेकिन इस विधि के अपने नुकसान हैं।
रिसाव मेरे सारे 5.0+ चलाने वाले डिवाइस पर हर बार होता है, 4.3 और नीचे के साथ की जाँच नहीं की है।
रिसाव की जानकारी नीचे चिपकाया जाता है: 1.0:
com.example.webviewmemoryleaktest में 1। * com.example.webviewmemoryleaktest.WebViewActivity लीक हो गया है: * जी सी जड़ android.os.ResultReceiver $ MyResultReceiver.this $ 0 * संदर्भ $ 2 $ 1. इस $ 1 org.chromium.content.browser.ContentViewCore (अनाम वर्ग android.os फैली .ResultReceiver) * संदर्भ org.chromium.content.browser.ContentViewCore $ 2. इस $ 0 * संदर्भ org.chromium.content.browser.ContentViewCore.mContext * संदर्भ com.android.webview.chromium.ResourcesContextWrapperFactory $ WebViewContextWrapper.mBase * com.example.webviewmemoryleaktest.WebViewActivity उदाहरण लीक
- संदर्भ कुंजी: 9a0346cf-6ad9-4b07-9329-a97 5d8fa3cbe
- डिवाइस: LGE गूगल नेक्सस 4 occam
- एंड्रॉयड संस्करण: 5.1 एपीआई: 22
- अवधियां: = 5139ms, जीसी = 188ms, हीप डंप = 2822ms, घड़ी विश्लेषण = 30918ms
अगर कोई मदद कर सकता है तो सराहना करें। धन्यवाद!
https://github.com/square/leakcanary/issues/92#issuecomment-102181372 - वे एंड्रॉयड ढांचे कोड के आधार पर लीक से निपटने के लिए एक प्रलेखित कार्यप्रणाली की है। यह भी शामिल है [लीक कैनरी दस्तावेज में] (https://github.com/square/leakcanary#my-leak-is-caused-by-the-android-sdk-implementation)। – CommonsWare
क्या आप 'WebView.destroy() '[doc] (http://developer.android.com/reference/android/webkit/WebView.html#destroy()) पर कॉल करते हैं, जब आपको अब WebView की आवश्यकता नहीं होती है और इसे हटा दिया जाता है दृश्य पदानुक्रम? –
हां, मैंने mWebView.destroy()/mWebView = null/mWebView.load (लगभग: खाली) किया है, उनमें से कोई भी मेरे लिए काम नहीं करता है। –