我在 Android 应用中有一个 WebView。有时,webview 中的页面不显示。这是随机发生的:对于同一页面,它有时会出现,有时不会。尽管页面没有显示,但空白区域占据了适当的空间(我知道是因为在 webview 下方还有其他控件)。奇怪的是,如果我使用 chrome://inspect
检查 webview,页面就在那里并且正确显示。
当问题发生时,如果我通过 DevTools 在 html 中执行小的更改,同样的效果仍然存在:新页面出现在 DevTools 视图中,但在设备中,显示一个空白区域,该区域应该是被新页面占用。该页面仅在我更改 html/css 中的某些内容使其大小调整很多时才显示。
该应用使用 Jetpack Compose 并通过 WebView
使用 AndroidView
。出现问题时,logcat中有时会出现以下回溯:
2021-02-16 16:08:34.866 9683-9698/... E/System: Uncaught exception thrown by finalizer
2021-02-16 16:08:34.909 9683-9698/... E/System: java.lang.IllegalStateException: Warning: Router objects should be explicitly closed when no longer required otherwise you may leak handles.
at w4.finalize(chromium-TrichromeWebViewGoogle.aab-stable-432415233:4)
at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:289)
at java.lang.Daemons$FinalizerDaemon.runInternal(Daemons.java:276)
at java.lang.Daemons$Daemon.run(Daemons.java:137)
at java.lang.Thread.run(Thread.java:919)
Caused by: java.lang.Exception: AutocloseableRouter allocated at:
at w4.<init>(chromium-TrichromeWebViewGoogle.aab-stable-432415233:4)
at vu.<init>(chromium-TrichromeWebViewGoogle.aab-stable-432415233:8)
at org.chromium.content.browser.framehost.RenderFrameHostImpl.<init>(chromium-TrichromeWebViewGoogle.aab-stable-432415233:10)
at org.chromium.content.browser.framehost.RenderFrameHostImpl.create(chromium-TrichromeWebViewGoogle.aab-stable-432415233:1)
at J.N.MZAK3_Tx(Native Method)
at org.chromium.content.browser.webcontents.WebContentsImpl.E0(chromium-TrichromeWebViewGoogle.aab-stable-432415233:3)
at qP.renderFrameDeleted(chromium-TrichromeWebViewGoogle.aab-stable-432415233:2)
at org.chromium.content.browser.webcontents.WebContentsObserverProxy.renderFrameDeleted(chromium-TrichromeWebViewGoogle.aab-stable-432415233:2)
at J.N.MQGusfGb(Native Method)
at v5.run(chromium-TrichromeWebViewGoogle.aab-stable-432415233:2)
at ze.handleMessage(chromium-TrichromeWebViewGoogle.aab-stable-432415233:21)
at Be.a(chromium-TrichromeWebViewGoogle.aab-stable-432415233:3)
at Be.<init>(chromium-TrichromeWebViewGoogle.aab-stable-432415233:3)
at org.chromium.android_webview.AwContents.M(chromium-TrichromeWebViewGoogle.aab-stable-432415233:88)
at org.chromium.android_webview.AwContents.L(chromium-TrichromeWebViewGoogle.aab-stable-432415233:2)
at org.chromium.android_webview.AwContents.<init>(chromium-TrichromeWebViewGoogle.aab-stable-432415233:67)
at L60.run(chromium-TrichromeWebViewGoogle.aab-stable-432415233:9)
at L80.b(chromium-TrichromeWebViewGoogle.aab-stable-432415233:3)
at J80.run(chromium-TrichromeWebViewGoogle.aab-stable-432415233:1)
at org.chromium.base.task.PostTask.c(chromium-TrichromeWebViewGoogle.aab-stable-432415233:3)
at L80.a(chromium-TrichromeWebViewGoogle.aab-stable-432415233:3)
at com.android.webview.chromium.WebViewChromium.init(chromium-TrichromeWebViewGoogle.aab-stable-432415233:77)
at android.webkit.WebView.<init>(WebView.java:429)
at android.webkit.WebView.<init>(WebView.java:353)
at android.webkit.WebView.<init>(WebView.java:336)
at android.webkit.WebView.<init>(WebView.java:323)
at android.webkit.WebView.<init>(WebView.java:313)
(my invocation)
我使用 WebView 如下:
@Composable
fun WebViewView(
html: String,
baseUrl: String? = null
) {
AndroidView({ context ->
val webView = WebView(context)
// configure webview
webview
})
}
这可能是什么原因?