Android 在线程';最终确定日期';但我的应用程序没有网络视图
我在开发应用程序时使用StrictMode策略:Android 在线程';最终确定日期';但我的应用程序没有网络视图,android,android-webview,android-strictmode,Android,Android Webview,Android Strictmode,我在开发应用程序时使用StrictMode策略: StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder() .detectLeakedSqlLiteObjects() .detectLeakedClosableObjects() .penaltyLog() .penaltyDea
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)
我的应用程序没有任何web视图,这就是为什么这很奇怪
这真的很烦人,崩溃没有包括我的任何代码行,只有android和google软件包
有什么想法吗?显然,您正在使用使用WebView(Admob?)的应用内ads SDK。请参阅
com.google.android.gms.ads.internal.WebView…
另外,根据我使用
WebView
和stricmode
的经验,您得到这种行为的事实可能不是ADSSDK的缺陷:我在我们的应用程序中,为了解决这个问题,我们必须禁用一些检查(或减少对日志的惩罚)(我们确实使用了WebView
,而WebView
本身就产生了StrictMode
的问题,因为从UI线程进行磁盘访问以及类似的问题)。我对admob也有同样的问题
下面是我如何重现崩溃的过程:
- 当我的活动打开时,我加载一个interstitial->interstitial.loadAd(adRequest)
- 但是一些设计原因取决于用户操作,我不需要这个间隙,因为我永远不会显示它
- 用户操作打开另一个活动并销毁包含间隙的活动
很抱歉重新激活此帖子,但在我看来,这是一个同样的问题。我没有给出解决方案,但至少给出了重现崩溃的确切方法。如果admob有人来到这里,请添加一个方法来取消处理加载显然,您使用的是使用WebView(admob?)的应用内ads SDK请参阅
com.google.android.gms.ads.internal.webview…
您的应用程序可能没有,但admob SDK是。您是否尝试过使用不同的版本,以防SDK中出现错误?根据我在webview和StrictMode中的经验,可能不是错误。我必须禁用我们的应用程序的一些检查(或减少日志记录的惩罚)为了解决这个问题。转到一个答案,因为它似乎是对您所经历行为的更合理的解释。真正的问题/恼人的部分是,我确实有AdMob集成,但在调试模式下,我不显示任何广告。在使用严格模式时,我的应用程序中没有可见的网络视图。我会说这是一个错误。然后,是的,我无论您是否显示WebView,它看起来都在创建中,因此这很可能是AdMob SDK上的一个错误。因此,我保留设计并获得所需行为的解决方案是将Interstitual实现为singleton并添加销毁方法。如果Interstitual完成加载,我将销毁我的singleton。这不是完美的解决方案离子,因为我继续在后台加载一些我知道我永远不会使用的…非常疯狂,他们没有想到添加一个取消请求方法。。。