在线程 'FinalizerDaemon' 上调用了 WebView 方法,但我的应用程序没有 WEBVIEW
A WebView method was called on thread 'FinalizerDaemon' BUT MY APP HAS NO WEBVIEW
我在开发我的应用程序时使用 StrictMode 策略:
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects()
.detectLeakedClosableObjects()
.penaltyLog()
.penaltyDeath()
.build());
我遇到了一种新型的崩溃,似乎无处出现:
W/WebView: 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) {7424b6e} called on null, FYI main Looper is Looper (main, tid 2) {7424b6e})
at android.webkit.WebView.checkThread(WebView.java:2695)
at android.webkit.WebView.loadUrl(WebView.java:969)
at com.google.android.gms.ads.internal.webview.v.e(:com.google.android.gms.policy_ads_fdr_dynamite@20290004@20290004.249178941.249178941:1)
at com.google.android.gms.ads.internal.webview.v.destroy(:com.google.android.gms.policy_ads_fdr_dynamite@20290004@20290004.249178941.249178941:9)
at com.google.android.gms.ads.internal.webview.t.destroy(:com.google.android.gms.policy_ads_fdr_dynamite@20290004@20290004.249178941.249178941:10)
at com.google.android.gms.ads.nonagon.ad.interstitial.b.finalize(:com.google.android.gms.policy_ads_fdr_dynamite@20290004@20290004.249178941.249178941:2)
at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:252)
at java.lang.Daemons$FinalizerDaemon.runInternal(Daemons.java:239)
at java.lang.Daemons$Daemon.run(Daemons.java:105)
at java.lang.Thread.run(Thread.java:764)
2019-06-17 15:25:59.035 31170-31180/hu.myapp.name D/StrictMode: StrictMode policy violation: android.os.strictmode.WebViewMethodCalledOnWrongThreadViolation
at android.webkit.WebView.checkThread(WebView.java:2695)
at android.webkit.WebView.loadUrl(WebView.java:969)
at com.google.android.gms.ads.internal.webview.v.e(:com.google.android.gms.policy_ads_fdr_dynamite@20290004@20290004.249178941.249178941:1)
at com.google.android.gms.ads.internal.webview.v.destroy(:com.google.android.gms.policy_ads_fdr_dynamite@20290004@20290004.249178941.249178941:9)
at com.google.android.gms.ads.internal.webview.t.destroy(:com.google.android.gms.policy_ads_fdr_dynamite@20290004@20290004.249178941.249178941:10)
at com.google.android.gms.ads.nonagon.ad.interstitial.b.finalize(:com.google.android.gms.policy_ads_fdr_dynamite@20290004@20290004.249178941.249178941:2)
at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:252)
at java.lang.Daemons$FinalizerDaemon.runInternal(Daemons.java:239)
at java.lang.Daemons$Daemon.run(Daemons.java:105)
at java.lang.Thread.run(Thread.java:764)
我的应用程序没有任何网络视图,这就是为什么这很奇怪。
这真的很烦人,崩溃不包括我的任何代码行,只有 android 和 google 包。
有什么想法吗?
显然您使用的是 in-app 广告 SDK,它使用 WebView(Admob?)参见 com.google.android.gms.ads.internal.webview...
。
此外,根据我使用 WebView
和 StrictMode
的经验,您出现这种行为可能不是 Ads SDK 的错误:我的应用程序必须禁用一些检查(或减少对日志的惩罚)以解决问题(我们确实使用 WebView
,并且 WebView
本身会造成 StrictMode
的问题,因为磁盘访问是从 UI 线程和类似问题)。
我对 admob 也有同样的问题。
这是我重现崩溃的方法:
- 当我的 activity 打开时,我加载了插页式广告 -> interstitial.loadAd(adRequest);
- 但是根据用户操作的一些设计原因,我不需要这个插页式广告,因为我永远不会显示它。
- 用户操作打开另一个 activity 并销毁包含插页式广告的那个
-> 如果用户在插播广告完全加载时打开这个新的 activity,我没有任何问题。
-> 如果用户在 intertial 完全加载之前打开这个新的 activity,则会发生崩溃。当然是因为当插页式芬兰语下载其数据时,它会初始化一个 webview。但是,由于中间变量已经到达垃圾收集器...
所以解决方案是必须取消插页式请求,但我发现无能为力...
不太确定如何解决我的问题。我不想等待加载结束来响应用户操作。我也不能延迟或忽略插页式广告的加载,假设用户将执行什么操作...
很抱歉重新激活此 post,但在我看来是同样的问题。我没有提供解决方案,但至少提供了重现崩溃的确切方法。如果admob的人来这里,请添加一个方法来取消处理加载
我在开发我的应用程序时使用 StrictMode 策略:
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects()
.detectLeakedClosableObjects()
.penaltyLog()
.penaltyDeath()
.build());
我遇到了一种新型的崩溃,似乎无处出现:
W/WebView: 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) {7424b6e} called on null, FYI main Looper is Looper (main, tid 2) {7424b6e})
at android.webkit.WebView.checkThread(WebView.java:2695)
at android.webkit.WebView.loadUrl(WebView.java:969)
at com.google.android.gms.ads.internal.webview.v.e(:com.google.android.gms.policy_ads_fdr_dynamite@20290004@20290004.249178941.249178941:1)
at com.google.android.gms.ads.internal.webview.v.destroy(:com.google.android.gms.policy_ads_fdr_dynamite@20290004@20290004.249178941.249178941:9)
at com.google.android.gms.ads.internal.webview.t.destroy(:com.google.android.gms.policy_ads_fdr_dynamite@20290004@20290004.249178941.249178941:10)
at com.google.android.gms.ads.nonagon.ad.interstitial.b.finalize(:com.google.android.gms.policy_ads_fdr_dynamite@20290004@20290004.249178941.249178941:2)
at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:252)
at java.lang.Daemons$FinalizerDaemon.runInternal(Daemons.java:239)
at java.lang.Daemons$Daemon.run(Daemons.java:105)
at java.lang.Thread.run(Thread.java:764)
2019-06-17 15:25:59.035 31170-31180/hu.myapp.name D/StrictMode: StrictMode policy violation: android.os.strictmode.WebViewMethodCalledOnWrongThreadViolation
at android.webkit.WebView.checkThread(WebView.java:2695)
at android.webkit.WebView.loadUrl(WebView.java:969)
at com.google.android.gms.ads.internal.webview.v.e(:com.google.android.gms.policy_ads_fdr_dynamite@20290004@20290004.249178941.249178941:1)
at com.google.android.gms.ads.internal.webview.v.destroy(:com.google.android.gms.policy_ads_fdr_dynamite@20290004@20290004.249178941.249178941:9)
at com.google.android.gms.ads.internal.webview.t.destroy(:com.google.android.gms.policy_ads_fdr_dynamite@20290004@20290004.249178941.249178941:10)
at com.google.android.gms.ads.nonagon.ad.interstitial.b.finalize(:com.google.android.gms.policy_ads_fdr_dynamite@20290004@20290004.249178941.249178941:2)
at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:252)
at java.lang.Daemons$FinalizerDaemon.runInternal(Daemons.java:239)
at java.lang.Daemons$Daemon.run(Daemons.java:105)
at java.lang.Thread.run(Thread.java:764)
我的应用程序没有任何网络视图,这就是为什么这很奇怪。
这真的很烦人,崩溃不包括我的任何代码行,只有 android 和 google 包。
有什么想法吗?
显然您使用的是 in-app 广告 SDK,它使用 WebView(Admob?)参见 com.google.android.gms.ads.internal.webview...
。
此外,根据我使用 WebView
和 StrictMode
的经验,您出现这种行为可能不是 Ads SDK 的错误:我的应用程序必须禁用一些检查(或减少对日志的惩罚)以解决问题(我们确实使用 WebView
,并且 WebView
本身会造成 StrictMode
的问题,因为磁盘访问是从 UI 线程和类似问题)。
我对 admob 也有同样的问题。
这是我重现崩溃的方法:
- 当我的 activity 打开时,我加载了插页式广告 -> interstitial.loadAd(adRequest);
- 但是根据用户操作的一些设计原因,我不需要这个插页式广告,因为我永远不会显示它。
- 用户操作打开另一个 activity 并销毁包含插页式广告的那个
-> 如果用户在插播广告完全加载时打开这个新的 activity,我没有任何问题。
-> 如果用户在 intertial 完全加载之前打开这个新的 activity,则会发生崩溃。当然是因为当插页式芬兰语下载其数据时,它会初始化一个 webview。但是,由于中间变量已经到达垃圾收集器...
所以解决方案是必须取消插页式请求,但我发现无能为力...
不太确定如何解决我的问题。我不想等待加载结束来响应用户操作。我也不能延迟或忽略插页式广告的加载,假设用户将执行什么操作...
很抱歉重新激活此 post,但在我看来是同样的问题。我没有提供解决方案,但至少提供了重现崩溃的确切方法。如果admob的人来这里,请添加一个方法来取消处理加载