Я получаю эту ошибку, когда устройство меняет ориентацию:
Error: WebView.destroy() called while still attached
.
С этим кодом:
protected void onDestroy()
{
if (adView != null)
{
adView.destroy();
}
}
В чем причина? Как избежать этой ошибки?
Сначала необходимо отсоединить Webview:
webViewPlaceholder.removeView(myWebView);
myWebView.removeAllViews();
myWebView.destroy();
Это помогло мне.
По моим тестам, этот вопрос раскрывается в Admob SDK для версии V6.4.1 и по крайней мере на Android версии 4.2.2+. При тестировании образец AdMob в приложение, упомянутое в https://developers.google.com/mobile-ads-sdk/docs/admob/fundamentals#android (прямая ссылка http://google-mobile-dev.googlecode.com/files/Android_XML.zip), эта проблема возникает при закрытии образец экрана.
Моя работа-вокруг достаточно:
@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 будет очень скоро исправить этот раздражающий вопрос.
Чтобы не получить эту ошибку, вам нужно иметь родительский макет, например: RelativeLayout и удалить компонент WebView, который мог быть определен в 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>
Затем присвоить его переменной экземпляра, например:
_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();
}