Error: WebView.destroy() called while still attached

后端 未结 5 529
一向
一向 2020-12-23 11:50

I am getting this error when the device changes orientation:

Error: WebView.destroy() called while still attached

With this code:



        
相关标签:
5条回答
  • 2020-12-23 12:11

    According to my tests, this issue is revealed in AdMob SDK v6.4.1 and at least on Android v4.2.2+. When testing the AdMob sample application referred to at https://developers.google.com/mobile-ads-sdk/docs/admob/fundamentals#android (direct link is http://google-mobile-dev.googlecode.com/files/Android_XML.zip), the issue occurs when closing the sample screen.

    My work-around is rather:

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

    Hope that helps other people, and that the AdMob will very soon fix that annoying issue.

    0 讨论(0)
  • 2020-12-23 12:13
     @Override
    public void onDetachedFromWindow() {
        super.onDetachedFromWindow();
        if (mWebView != null) {
            mWebView.destroy();
        }
    }
    
    0 讨论(0)
  • 2020-12-23 12:15

    To avoid the error you just need to remove all views before you destroy the ad.

    @Override
    public void onDestroy()
    {
        if (adView != null)
        {
            adView.removeAllViews();
            adView.destroy();
        }
        super.onDestroy();
    }
    
    0 讨论(0)
  • 2020-12-23 12:20

    For you don't get this error you need to have a parent layout, e.g. : RelativeLayout and remove the WebView component, that might had been defined on you 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>
    

    Then you assign it to an instance variable e.g. :

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

    and on Destroy do something like this:

    @Override
    protected void onDestroy() {
        super.onDestroy();
        _layout.removeView(webView);
        webView.setFocusable(true);
        webView.removeAllViews();
        webView.clearHistory();
        webView.destroy();
    }
    
    0 讨论(0)
  • 2020-12-23 12:24

    You first need to detach the Webview:

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

    That did it for me.

    0 讨论(0)
提交回复
热议问题