我正在使用admob SDK 18.1.1
并获得最终确定的异常
java.lang.RuntimeException: java.lang.Throwable: A WebView method was called on thread 'FinalizerDaemon'. All WebView methods must be called on the same thread. (Expected Looper Looper (main, tid 2) {f4f671a} called on null, FYI main Looper is Looper (main, tid 2) {f4f671a})
这个问题发生在Admob SDK内吗?
堆栈跟踪:
at android.webkit.WebView.checkThread(WebView.java:2732)
at android.webkit.WebView.evaluateJavascript(WebView.java:1128)
at com.google.android.gms.internal.ads.zzbbq.evaluateJavascript(com.google.android.gms:play-services-ads@@18.1.1:108)
at com.google.android.gms.internal.ads.zzbbq.zza(com.google.android.gms:play-services-ads@@18.1.1:144)
at com.google.android.gms.internal.ads.zzbbq.zzfk(com.google.android.gms:play-services-ads@@18.1.1:151)
at com.google.android.gms.internal.ads.zzbbq.zza(com.google.android.gms:play-services-ads@@18.1.1:190)
at com.google.android.gms.internal.ads.zzbbq.zza(com.google.android.gms:play-services-ads@@18.1.1:101)
at com.google.android.gms.internal.ads.zzbbq.zzav(com.google.android.gms:play-services-ads@@18.1.1:630)
at com.google.android.gms.internal.ads.zzbbq.onDetachedFromWindow(com.google.android.gms:play-services-ads@@18.1.1:434)
at android.view.View.dispatchDetachedFromWindow(View.java:18583)
at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:3793)
at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:3785)
at android.view.ViewGroup.removeViewInternal(ViewGroup.java:5375)
at android.view.ViewGroup.removeViewInternal(ViewGroup.java:5346)
at android.view.ViewGroup.removeView(ViewGroup.java:5277)
at com.google.android.gms.ads.internal.overlay.zze.onDestroy(com.google.android.gms:play-services-ads@@18.1.1:125)
at com.google.android.gms.internal.ads.zzbbq.destroy(com.google.android.gms:play-services-ads@@18.1.1:472)
at com.google.android.gms.internal.ads.zzbbo.destroy(com.google.android.gms:play-services-ads@@18.1.1:106)
at com.google.android.gms.internal.ads.zzbrc.finalize(com.google.android.gms:play-services-ads@@18.1.1:33)
at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:256)
at java.lang.Daemons$FinalizerDaemon.runInternal(Daemons.java:243)
at java.lang.Daemons$Daemon.run(Daemons.java:109)
at java.lang.Thread.run(Thread.java:764)
Caused by: java.lang.Throwable: A WebView method was called on thread 'FinalizerDaemon'. All WebView methods must be called on the same thread. (Expected Looper Looper (main, tid 2) {f4f671a} called on null, FYI main Looper is Looper (main, tid 2) {f4f671a})
OS:Android 7.1,8.0,8.1,9.0正在获得相同的错误日志
此问题主要是因为您使用间隙广告。因为我遇到了同样的问题,Google拒绝了我对该应用程序进行的任何更新,直到我"解决"了该问题。
这里的问题是,当您退出"主页"按钮上的应用程序时,间质广告也将尝试加载。
因此,离开应用程序时必须阻止广告加载。
您可以尝试此操作(我做了什么(:
在您的Activiy/Fragment中创建一个字段变量,例如 private boolean shouldLoadAds
;
在您的ongreate((中,您初始化了您的间隙:
mInterstitialAd = new InterstitialAd(this);
mInterstitialAd .setAdUnitId(getString(R.string.adview_interstitial));
mInterstitialAd .loadAd(new AdRequest.Builder().build());
,当您致电间质以显示它时,您会这样这样做:
if(mInterstitialAd != null && mInterstitialAd .isLoaded()) {
mInterstitialAd .show();
mInterstitialAd .setAdListener(new AdListener(){
@Override
public void onAdClosed() {
super.onAdClosed();
if(shouldLoadAds) { //load the ad only if shouldLoadAds == true
mInterstitialAd .loadAd(new AdRequest.Builder().build());
}
//here some code, what should be done, after the ads is cloded
}
});
}
然后,您必须覆盖onStart()
和onStop()
:
@Override
public void onStart() {
super.onStart();
shouldLoadAds= true;
}
@Override
public void onStop() {
shouldLoadAds= false;
super.onStop();
}