2012-08-16 14 views
29

estoy recibiendo este error cuando el dispositivo cambia la orientación:error: WebView.destroy() llamada mientras todavía están unidos

Error: WebView.destroy() called while still attached

Con este código:

protected void onDestroy() 
{ 
    if (adView != null) 
    { 
     adView.destroy(); 
    } 
} 

¿Cuál es la razón de ¿esta? ¿Cómo evito este error?

+1

quizá toda la pila de llamadas le ayudará – nandeesh

+3

Antes de llamar a destruir lo que necesita para eliminar la vista Web desde el sistema de puntos de vista Ver http://developer.android.com/reference/android/webkit/WebView.html#destroy() Gracias – ebtokyo

Respuesta

43

Primero tiene que separar la vista Web:

webViewPlaceholder.removeView(myWebView); 
myWebView.removeAllViews(); 
myWebView.destroy(); 

Eso lo hizo por mí.

+0

Gracias. Este error de repente comenzó a aparecer, sin problemas anteriores. Esto lo solucionó de nuevo. – Warpzit

+1

Vagando por qué esta respuesta fue marcada como correcta. No tiene relación con la pregunta inicial. La respuesta correcta real es de Matthew – Ernest

+1

El 'myParentView.removeView (myWebView);' es lo que hace el truco, en realidad. – caw

27

Para evitar el error, solo necesita eliminar todas las vistas antes de destruir el anuncio.

@Override 
public void onDestroy() 
{ 
    if (adView != null) 
    { 
     adView.removeAllViews(); 
     adView.destroy(); 
    } 
    super.onDestroy(); 
} 
+3

No quiero decepcionarte, pero esto no funciona. Tengo el mismo problema con mi WebView y siempre cierro mi WebView así y el error existe sin embargo. – Leandros

+2

Esto funciona para mí. El documento oficial de admob debería agregar adView.removeAllViews(); No quiero que el anuncio siga consumiendo recursos después de que se destruya la actividad. –

+1

No resuelve el problema por completo. También lo encuentro, la aplicación aún se cuelga aunque use este código – BaDo

6

Para que no obtenga este error, debe tener un diseño principal, p. : RelativeLayout y elimine el componente WebView, que podría haber sido definido en usted layoutWebView.xml.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/webviewRelativeLayout" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 

<WebView 
    android:id="@+id/webView1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_below="@+id/headerAlarmsWebViewTxt" 
    android:layout_marginBottom="0dip" 
    android:hapticFeedbackEnabled="true" 
    android:overScrollMode="never" 
    android:scrollbarAlwaysDrawVerticalTrack="false" 
    android:scrollbars="none" /> 

</RelativeLayout> 

continuación, se asigna a una instancia por ejemplo, la variable :

_layout = (RelativeLayout) findViewById(R.id.webviewRelativeLayout); 
webView = (WebView) findViewById(R.id.webView1); 

y en destruir hacer algo como esto:

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    _layout.removeView(webView); 
    webView.setFocusable(true); 
    webView.removeAllViews(); 
    webView.clearHistory(); 
    webView.destroy(); 
} 
9
@Override 
public void onDetachedFromWindow() { 
    super.onDetachedFromWindow(); 
    if (mWebView != null) { 
     mWebView.destroy(); 
    } 
} 
+0

gracias, esa es una gran respuesta – user1324936

7

Según mis pruebas, este problema se revela en AdMob SDK v6.4.1 y al menos en Android v4.2.2 + . Al probar la aplicación de ejemplo de AdMob a la que se hace referencia en https://developers.google.com/mobile-ads-sdk/docs/admob/fundamentals#android (el enlace directo es http://google-mobile-dev.googlecode.com/files/Android_XML.zip), el problema ocurre al cerrar la pantalla de muestra.

Mi solución alternativa es más bien:

@Override 
    public void onDestroy() 
    { 
    // Destroy the AdView. 
    if (adView != null) 
    { 
     final ViewGroup viewGroup = (ViewGroup) adView.getParent(); 
     if (viewGroup != null) 
     { 
     viewGroup.removeView(adView); 
     } 
     adView.destroy(); 
    } 

    super.onDestroy(); 
    } 

esperanza de que ayuda a otras personas, y que el AdMob muy pronto solucionar ese problema molesto.

+0

¡quién sabía! hecho con la desagradable filtración. Muchas gracias. – YvesLeBorg

Cuestiones relacionadas