Ho utilizzato uno strumento leakcanary per individuare perdite di memoria nella mia applicazione. Sembra che la mia WebViewActivity passi ogni volta.LeakCanary spots Perdita di memoria Android WebView
Ho creato una semplice applicazione per testare le perdite. Inizio un'attività con una WebView all'interno del file di layout xml/gonfia con il contesto delle attività. Js off. Tutto il valore predefinito prevede un semplice webViewClient che mantenga il reindirizzamento all'interno di WebView. Si perde ogni volta.
Ho fatto un sacco di ricerche, l'unico modo per impedire che questo è avviare WebViewActivity con un altro processo e ucciderlo dentro suDestroy. Ma questo metodo ha i suoi svantaggi.
La perdita si verifica ogni volta su tutti i miei dispositivi che eseguono 5.0+, non ho verificato con 4.3 e sotto.
Le informazioni perdita viene incollato sotto:
In com.example.webviewmemoryleaktest: 1,0: 1. * com.example.webviewmemoryleaktest.WebViewActivity è trapelato: * GC ROOT android.os.ResultReceiver $ MyResultReceiver.this $ 0 * riferimenti org.chromium.content.browser.ContentViewCore $ 2 $ 1.this $ 1 (classe anonima estende android.os .ResultReceiver) * riferimenti org.chromium.content.browser.ContentViewCore $ 2.this $ 0 * riferimenti org.chromium.content.browser.ContentViewCore.mContext * riferimenti com.android.webview.chromium.ResourcesContextWrapperFactory $ WebViewContextWrapper.mBase * perdite esempio com.example.webviewmemoryleaktest.WebViewActivity
- chiave di riferimento: 9a0346cf-6ad9-4b07-9329-A97 5d8fa3cbe
- dispositivo: LGE Google Nexus 4 Occam
- Versione Android: 5.1 API: 22
- Durate: guardare = 5139ms, GC = 188ms, heap dump = 2822ms, analisi = 30918ms
Apprezzo se qualcuno potrebbe aiutare. Grazie!
https://github.com/square/leakcanary/issues/92#issuecomment-102181372 - hanno una procedura documentata per gestire le perdite in base al codice di framework Android. Questo è anche coperto [nella documentazione di LeakCanary] (https://github.com/square/leakcanary#my-leak-is-caused-by-the-android-sdk-implementation). – CommonsWare
Chiama 'WebView.destroy()' [doc] (http://developer.android.com/reference/android/webkit/WebView.html#destroy()) quando non hai più bisogno di WebView e lo hai rimosso da la gerarchia delle visualizzazioni? –
Sì, ho fatto mWebView.destroy()/mWebView = null/mWebView.load (circa: vuoto), nessuno di loro funziona per me. –