android.webkit.WebViewClassic.loadDataWithBaseURL中Webview中的Java nullpointer异常
根据中提供的建议,我修改了AdMob代码以符合建议,这有效地减少了出现的异常数量。然而,一个新的例外正在出现 代码如下:android.webkit.WebViewClassic.loadDataWithBaseURL中Webview中的Java nullpointer异常,android,android-webview,adview,Android,Android Webview,Adview,根据中提供的建议,我修改了AdMob代码以符合建议,这有效地减少了出现的异常数量。然而,一个新的例外正在出现 代码如下: @Override protected void onDestroy() { if ( adView != null ) { adView.destroy(); adView = null; Log.i(ApplicationData.APP_TAG, TAG + ": OnDestroy, destroy
@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)
遗憾的是,我无法找到重现问题的方法,但问题在生产中经常发生。我没有发现任何问题,有人知道我能做什么吗?谷歌移动广告SDK团队的一位成员说(3月14日) 我们在第一次报道这一问题时就对其进行了调查,并在Google Play服务中发布了一个修复程序。当用户的设备更新到新版本时,您会看到越来越少的实例
请参阅在调用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.");
}
}
}
因此,现在不应该出现这种情况。WebViewClassic中第2741行发生了什么?我对android代码的这一部分不太熟悉。loadDataWithBaseURL(字符串baseUrl、字符串数据、字符串mimeType、字符串编码、字符串历史URL)=>其中一个值为null。似乎并发runnable正在尝试在活动被销毁后访问它的某些部分,可能是
adView
。活动中是否有其他线程正在运行?在adView.onDestroy()
之前,您是否尝试过调用adView.pause()
?(保留onPause
中的adView.pause()
)谢谢,看起来该漏洞存在于Android手机中,并且随着用户更新到新版本,它将消失。谢谢你发现它。到目前为止,我还没有看到任何新的错误。谢谢你的考古努力