在开发应用程序时,我正在使用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包。
有什么想法吗?
答案 0 :(得分:1)
显然您正在使用使用WebView的应用内广告SDK(Admob?)。请参见com.google.android.gms.ads.internal.webview...
。
另外,根据我对WebView
和StrictMode
的经验,您可能会遇到这种情况,这可能不是Ads SDK的错误:我的应用程序必须禁用一些检查(或减少日志记录的损失)以解决问题(我们确实使用WebView
,并且WebView
本身由于StrictMode
造成了问题,因为UI线程和类似操作完成了磁盘访问问题)。
答案 1 :(得分:0)
我对admob也有同样的问题。
这是我重现崩溃的方法:
->如果在空间加载完毕后用户打开此新活动,那么我没有任何问题。
->如果用户在完全加载Intertial之前打开此新活动,则会发生崩溃。肯定是因为插页式广告在下载其数据时会初始化一个Web视图。但是自那以后,instantitial变量已经到达了垃圾收集器...
所以解决方案是必须取消交互请求,但是我什么也没做...
不太确定如何解决我的问题。我不想等待加载结束以响应用户操作。我既不能延迟也不能忽略插页式广告的加载,前提是用户将要执行的操作...
很抱歉重新激活此帖子,但在我看来还是同样的问题。我没有给出解决方案,但至少给出了重现崩溃的确切方法。如果来自admob的人来了,请添加一种取消处理加载的方法