我最近遇到了一个问题,即在 WebView 中打开 Web 应用程序并开始执行,简而言之,一个永无休止的 Javascript 渲染循环。在循环进行时退出 WebView 并调用
destroy()
似乎不会终止 Javascript 调用,导致任何 WebView 实例随后无法加载任何内容。
我相信发生这种情况是因为只有一个渲染器进程并且 Javascript 在单个线程上运行。 Android 端有什么办法可以防御这种情况吗?在混合应用程序中,让 Web 开发人员无意中破坏整个本机体验似乎不太理想。
我期望关闭 WebView 来有效停止任何挂起的 Javascript 执行,但它继续运行并使整个渲染器进程无响应。
下面给出无限循环脚本
webView.evaluateJavascript(
"""
while (true) {}
""".trimIndent(),
null
)
我可以通过调用 WebViewRenderProcess.terminate
来终止渲染进程webView.webViewRenderProcess.terminate()
请注意,必须首先按照应用程序内所有 WebView(包括广告 SDK)的
文档的描述正确处理
WebViewClient.onRenderProcessGone
。否则,应用程序将崩溃。