根据this question中提供的建议,我修改了我的AdMob代码以符合建议,这有效地减少了出现的异常数量。然而,一个新的例外正在上升。
代码如下:
@Override
protected void onDestroy() {
if ( adView != null ) {
adView.destroy();
adView = null;
Log.i(ApplicationData.APP_TAG, TAG + ": OnDestroy, destroying the Adview");
}
super.onDestroy();
}
方法adView.destroy()
似乎在LogCat消息发布时运行良好。在此消息之后,我在WebView
上收到以下异常:
java.lang.NullPointerException
at android.webkit.WebViewClassic.loadDataWithBaseURL(WebViewClassic.java:2741)
at android.webkit.WebView.loadDataWithBaseURL(WebView.java:919)
at com.google.android.gms.ads.internal.request.n.run(SourceFile:206)
at android.os.Handler.handleCallback(Handler.java:725)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:153)
at android.app.ActivityThread.main(ActivityThread.java:5297)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
at dalvik.system.NativeStart.main(Native Method)
不幸的是,我无法找到重现问题的方法,但是经常在生产中发生。我找不到任何问题,有人暗示我能做些什么吗?
答案 0 :(得分:5)
其中一位Google移动广告SDK小组称(3月14日),
我们在首次报道时调查了此问题,并在Google Play服务中发布了修复程序。您应该会看到越来越少的实例作为您的用户'设备更新到新版本。
请参阅https://groups.google.com/forum/#!topic/google-admob-ads-sdk/oYpQI_L14Tg
答案 1 :(得分:2)
在调用loadDataWithBaseUrl之前销毁WebView(可能是其他线程)时会发生这种情况。在AdMob代码中,我看到他们现在处理如下
public void loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, String historyUrl) {
synchronized(this) {
if(!this.isDestroyed()) {
super.loadDataWithBaseURL(baseUrl, data, mimeType, encoding, historyUrl);
} else {
Log.d("The webview is destroyed. Ignoring action.");
}
}
}
所以现在不应该发生。