错误:WebView.destroy()仍然附加时调用

设备更改方向时出现此错误:

Error: WebView.destroy() called while still attached

有了这个代码:

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

这是什么原因? 我如何避免这个错误?

Solutions Collecting From Web of "错误:WebView.destroy()仍然附加时调用"

你首先需要分离Webview:

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

这是为我做的。

为了避免错误,您只需在删除广告之前删除所有视图。

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

因为你没有得到这个错误,你需要有一个父布局,例如:RelativeLayout并移除可能已经在layoutWebView.xml中定义的WebView组件。

 <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> 

然后将其分配给一个实例variables,例如:

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

并在Destroy上做这样的事情:

 @Override protected void onDestroy() { super.onDestroy(); _layout.removeView(webView); webView.setFocusable(true); webView.removeAllViews(); webView.clearHistory(); webView.destroy(); } 

根据我的testing,此问题在AdMob SDK v6.4.1中显示,至less在Android v4.2.2 +中显示。 在testinghttps://developers.google.com/mobile-ads-sdk/docs/admob/fundamentals#android中提到的AdMob示例应用程序时(直接链接为http://google-mobile-dev.googlecode.com/文件/ Android_XML.zip ),closures示例屏幕时会出现问题。

我的解决方法是:

  @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(); } 

希望能够帮助其他人,而且AdMob将很快解决这个烦人的问题。