LeakCanary detecta pérdida de memoria de Android WebView
He estado usando la herramienta leakcanary para detectar fugas de memoria en mi aplicación. Parece que mi WebViewActivity se filtra cada vez.
Creé una aplicación simple para probar las fugas. Comienzo una actividad con un WebView dentro del archivo de disposición de xml / inflate con el contexto de la actividad. Js apagado. Todo lo predeterminado espera un simple webViewClient manteniendo la redirección dentro de WebView. Se filtra cada vez.
- ¿Pasar la URL de WebView a ShareActionProvider?
- ¿Hay alguna forma de tener URL de enlace automático de WebView y números de teléfono en Android?
- Rendimiento del androide Sencha Touch 2
- Vista web de Android con el botón Atrás, si no
- Cómo enviar parámetros a un archivo local en un WebView en android?
He hecho un montón de investigación, la única manera de evitar esto es iniciar WebViewActivity con otro proceso y matarlo dentro de destruir. Pero este método tiene sus propias desventajas.
La filtración ocurre siempre en todos mis dispositivos que funcionan 5.0+, no han comprobado con 4.3 y abajo.
La información de la fuga se pega a continuación:
En com.example.webviewmemoryleaktest: 1.0: 1. * Com.example.webviewmemoryleaktest.WebViewActivity se ha filtrado: * GC ROOT android.os.ResultReceiver $ MyResultReceiver.this $ 0 * referencias org.chromium.content.browser.ContentViewCore $ 2 $ 1.this $ 1 (la clase anónima extiende android.os.ResultReceiver) * Referencias org.chromium.content.browser.ContentViewCore $ 2.this $ 0 * referencias org.chromium.content.browser.ContentViewCore.mContext * referencias com.android.webview.chromium.ResourcesContextWrapperFactory $ WebViewContextWrapper.mBase * filtra con.example.webviewmemoryleaktest .WebViewActivity instancia
- Clave de referencia: 9a0346cf-6ad9-4b07-9329-a975d8fa3cbe
- Dispositivo: LGE google Nexus 4 occam
- Versión de Android: 5.1 API: 22
- Duraciones: reloj = 5139ms, gc = 188ms, descarga del montón = 2822ms, análisis = 30918ms
Apreciar si alguien podría ayudar. ¡Gracias!
- Html textfield en WebView en una aplicación de Android está oculto por el teclado virtual
- Android - AdSense en WebView (para BlackBerry Playbook - Android Runtime)
- WebView saltar para anclar utilizando loadDataWithBaseUrl
- Destacar característica de texto como google play book
- Android WebView - Los vídeos de Youtube que no se reproducen dentro de la aplicación
- ¿Por qué mi webview de pantalla completa se cierra constantemente inmediatamente después de la apertura?
- Cómo hacer un reemplazo sobre las webs cargadas en una Webview
- Cómo encontrar la animación ha terminado de jugar en android
private ResultReceiver mResultReceiver = new ResultReceiver(new Handler()) { @Override public void onReceiveResult(int resultCode, Bundle resultData) { getContentViewClient().onImeStateChangeRequested( resultCode == InputMethodManager.RESULT_SHOWN || resultCode == InputMethodManager.RESULT_UNCHANGED_SHOWN); if (resultCode == InputMethodManager.RESULT_SHOWN) { // If OSK is newly shown, delay the form focus until // the onSizeChanged (in order to adjust relative to the // new size). // TODO(jdduke): We should not assume that onSizeChanged will // always be called, crbug.com/294908. getContainerView().getWindowVisibleDisplayFrame( mFocusPreOSKViewportRect); } else if (hasFocus() && resultCode == InputMethodManager.RESULT_UNCHANGED_SHOWN) { // If the OSK was already there, focus the form immediately. assert mWebContents != null; mWebContents.scrollFocusedEditableNodeIntoView(); } } }; @Override public ResultReceiver getNewShowKeyboardReceiver() { return mResultReceiver; }
Hacer que mResultReceiver sea privado.