Używam narzędzia leakcanary do wykrywania wycieków pamięci w mojej aplikacji. Wygląda na to, że mój WebViewActivity przecieka za każdym razem.LeakCanary spotykane wycieki pamięci Web Web View
Stworzyłem prostą aplikację do testowania wycieków. Rozpoczynam działanie z WebView wewnątrz pliku układu XML/zawyżam z kontekstem działania. Js off. Wszystko domyślnie oczekuje prostego webViewClient utrzymującego przekierowanie w WebView. Przecieka za każdym razem.
Zrobiłem wiele badań, jedynym sposobem, aby temu zapobiec, jest uruchomienie WebViewActivity z innym procesem i zabicie go w witrynie Demestroy. Ale ta metoda ma swoje wady.
Przeciek pojawia się za każdym razem na wszystkich urządzeniach z systemem 5.0+, nie sprawdzono z 4.3 i poniżej.
Przeciek informacji zostanie wklejony poniżej:
W com.example.webviewmemoryleaktest: 1,0: 1. * com.example.webviewmemoryleaktest.WebViewActivity wyciekło: * GC ROOT android.os.ResultReceiver $ MyResultReceiver.this $ 0 * odnosi się do org.chromium.content.browser.ContentViewCore 2 $ 1 $ 1. ten 1 $ (anonimowa klasa rozszerza android.os .ResultReceiver) * referencje org.chromium.content.browser.ContentViewCore $ 2.Niniejsze $ 0 * referencje org.chromium.content.browser.ContentViewCore.mContext * referencje com.android.webview.chromium.ResourcesContextWrapperFactory $ WebViewContextWrapper.mBase * przecieki instancję com.example.webviewmemoryleaktest.WebViewActivity
- Reference kluczowe: 9a0346cf-6ad9-4b07-9329-A97 5d8fa3cbe
- Urządzenie: LGE pomocną Nexus 4 Occam
- Android wersja 5.1 API 22
- Czasy trwania: oglądać = 5139ms GC = 188ms, stos zrzutu = 2822ms, analiza = 30918ms
Doceń, czy ktoś może pomóc. Dzięki!
https://github.com/square/leakcanary/issues/92#issuecomment-102181372 - mają udokumentowaną procedurę postępowania w przypadku wycieków w oparciu o kod systemu Android. Obejmuje to również [w dokumentacji LeakCanary] (https://github.com/square/leakcanary#my-leak-is-caused-by-the-android-sdk-implementation). – CommonsWare
Czy nazywasz 'WebView.destroy()' [doc] (http://developer.android.com/reference/android/webkit/WebView.html#destroy()), gdy nie potrzebujesz już WebView i usunąłeś go z hierarchia widoków? –
Tak, zrobiłem mWebView.destroy()/mWebView = null/mWebView.load (about: blank), żaden z nich nie działa dla mnie. –