Ich habe das Tool leakcanary verwendet, um Speicherlecks in meiner Anwendung zu erkennen. Es scheint, dass meine WebViewActivity jedes Mal leckt.LeakCanary Flecken Android WebView Speicherleck
Ich habe eine einfache Anwendung zum Testen der Leckagen erstellt. Ich starte eine Aktivität mit einem WebView innerhalb der XML-Layoutdatei/mit Aktivitätskontext aufblasen. Js aus. Alles Standard erwartet einen einfachen WebViewClient, der die Umleitung innerhalb des WebView hält. Es leckt jedes Mal.
Ich habe viel Forschung getan, die einzige Möglichkeit, dies zu verhindern, ist WebViewActivity mit einem anderen Prozess zu starten und es in OnDestroy zu töten. Aber diese Methode hat ihre eigenen Nachteile.
Das Leck passiert jedes Mal auf allen Geräten mit 5.0+, nicht mit 4.3 und darunter überprüft.
In com.example.webviewmemoryleaktest:
Das Leck info wird unten eingefügt 1,0: 1. * com.example.webviewmemoryleaktest.WebViewActivity hat durchgesickert: * GC ROOT android.os.ResultReceiver $ MyResultReceiver.this $ 0 * Referenzen $ 2 $ 1.this von $ 1 (anonyme Klasse org.chromium.content.browser.ContentViewCore erstreckt android.os .ResultReceiver) * Referenzen org.chromium.content.browser.ContentViewCore 2.this $ 0 $ * Referenzen org.chromium.content.browser.ContentViewCore.mContext * Referenzen com.android.webview.chromium.ResourcesContextWrapperFactory $ WebViewContextWrapper.mBase * Lecks com.example.webviewmemoryleaktest.WebViewActivity Instanz
- Referenzschlüssel: 9a0346cf-6ad9-4b07-9329-a97 5d8fa3cbe
- Gerät: LGE Google Nexus 4 occam
- Android Version: 5.1 API: 22
- Dauern: watch = 5139ms, gc = 188ms, Heapdump = 2822ms, Analyse = 30918ms
Schätze, wenn jemand helfen könnte. Vielen Dank!
https://github.com/square/leakcanary/issues/92#issuecomment-102181372 - Sie verfügen über ein dokumentiertes Verfahren zum Umgang mit Lecks auf der Basis von Android-Framework-Code. Dies wird auch in der LeakCanary-Dokumentation behandelt (https://github.com/square/leakcanary#my-leak-is-cracted-by-the-android-sdk-implementation). – CommonsWare
Rufen Sie 'WebView.destroy()' [doc] (http://developer.android.com/reference/android/webkit/WebView.html#destroy()) auf, wenn Sie WebView nicht mehr benötigen und es entfernt haben die Sichtenhierarchie? –
Ja, ich habe mWebView.destroy()/mWebView = null/mWebView.load (etwa: leer), keiner von ihnen funktioniert für mich. –