首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android Webview在三星和Android 11上崩溃

Android Webview在三星和Android 11上崩溃
EN

Stack Overflow用户
提问于 2021-05-31 23:31:21
回答 1查看 765关注 0票数 7

这是我们在Firebase上看到的堆栈跟踪:

代码语言:javascript
复制
Fatal Exception: java.lang.RuntimeException
Using WebView from more than one process at once with the same data directory is not supported. https://crbug.com/558377 : Current process [Our package] (pid 28562), lock owner [Our package] (pid 13324)
org.chromium.android_webview.AwDataDirLock.b (AwDataDirLock.java:27)
as0.i (as0.java:30)
as0.b (as0.java:17)
as0.k (as0.java:2)
com.android.webview.chromium.WebViewChromiumFactoryProvider.g (WebViewChromiumFactoryProvider.java:2)
com.android.webview.chromium.WebViewChromium.init (WebViewChromium.java:14)
android.webkit.WebView.<init> (WebView.java:435)
android.webkit.WebView.<init> (WebView.java:355)
android.webkit.WebView.<init> (WebView.java:337)
android.webkit.WebView.<init> (WebView.java:324)
android.webkit.WebView.<init> (WebView.java:314)
[Our code initializing the webview]
android.os.Handler.handleCallback (Handler.java:938)
android.os.Handler.dispatchMessage (Handler.java:99)
android.os.Looper.loop (Looper.java:246)
android.app.ActivityThread.main (ActivityThread.java:8506)
java.lang.reflect.Method.invoke (Method.java)
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:602)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1130)

我们无法重现这种情况,但我们在Firebase上得到了成百上千个这样的崩溃。奇怪的是,99%的崩溃发生在运行Android 11的三星设备上。我们的应用程序也是单进程应用程序,所以它不应该运行多个进程。我已经在chromium问题跟踪器上发了帖子,但似乎这个bug更多的是三星操作系统的问题,而不是webview本身,所以我想我也应该在这里发帖。

看起来有些用户让我们的应用程序运行了几个小时,抓住了这个Webview锁。然而,当他们试图打开我们的应用程序时,它正在启动一个新的进程,而不是现有的进程,并导致崩溃。

我正在努力获取更多信息:有谁能洞察为什么三星Android 11会发生这种情况?我们的应用程序或我们的用户可以做些什么来缓解这个问题吗?还有没有其他人遇到过这个问题并找到了解决方法?

EN

回答 1

Stack Overflow用户

发布于 2021-06-07 22:06:47

我不记得确切的堆栈跟踪,但当我在一些设备上返回应用程序时,我遇到了类似的WebView崩溃应用程序问题。在没有解决方案起作用后,我尝试从XML中删除WebView定义,并在onStop()方法中将WebView初始化移动到Activity (Kotlin)中并手动销毁。没有找到关于问题是什么的信息,但解决了我的问题。

代码语言:javascript
复制
   override fun onResume() {
        webView = WebView(activity)
        //... init webview
        webViewLayout.addView(webView)
   }
   override fun onStop() {
        webViewLayout.removeView(webView)
        webView?.destroy()
        webView = null
    }

编辑:谢谢金斯顿指出我的错误。错误地在代码中创建webview,这与在onCreate()中销毁onStop没有意义。

如果在返回屏幕以保存资源时不需要刷新布局,您可以将创建移动到onCreate(),将销毁移动到onDestroy()。在我们的例子中,需要在返回屏幕时始终更新内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67776615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档