Android webview 崩溃“致命信号 5 (SIGTRAP)”

Posted

技术标签:

【中文标题】Android webview 崩溃“致命信号 5 (SIGTRAP)”【英文标题】:Android webview crash "Fatal signal 5 (SIGTRAP)" 【发布时间】:2017-08-13 00:28:51 【问题描述】:

我有一个带有 Web 视图的应用程序,我在其中加载启用了 javascripthtml 内容。 Web 视图位于片段内。

这就是我在片段的方法 onCreateView 中初始化 Web 视图的方式:

WebView webview = (WebView) mainView.findViewById(R.id.webview);

WebSettings webSettings = webview.getSettings();

webSettings.setJavaScriptEnabled(true);
webSettings.setDisplayZoomControls(false);
webSettings.setLoadsImagesAutomatically(true);
webSettings.setBuiltInZoomControls(true);
webSettings.setDomStorageEnabled(true);
webSettings.setSupportMultipleWindows(true);

webview.setWebViewClient(new WebViewClient() 
    @Override
    public void onPageFinished(WebView view, String url) 
        super.onPageFinished(view, url);
        /*
        * My code
        */
    
);

webview.setWebChromeClient(new WebChromeClient() 
    @Override
    public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) 
        WebView.HitTestResult result = view.getHitTestResult();
        String data = result.getExtra();
        if (data != null) 
            Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(data));
            startActivity(browserIntent);
        
        return false;
    
);

webview.loadDataWithBaseURL(baseUrl, htmlData, "text/html", "utf-8", "");

在 web 视图中,地图是使用 JavaScript 加载的。在这张地图上,我们可以点击元素并加载照片。单击时,照片会显示在弹出窗口中(仍在网络视图中)。当我点击返回按钮返回地图时,应用程序崩溃了。

这是错误日志:

A/libc:致命信号 5 (SIGTRAP),tid 949 中的代码 1 (Chrome_InProcRe) [03-21 11:26:08.510 364:364 W/] 调试器:处理请求:pid=32610 uid=10289 gid=10289 tid=949

我在 android 7.1.1、6.0.1、5.0.2 上测试并遇到了崩溃。然后我尝试使用 Android 4.4.2,应用程序没有崩溃。

当我点击后退按钮时(正如我们在 GIF 上看到的那样),它应该回到之前的状态并关闭弹出窗口

【问题讨论】:

你是在设备还是模拟器上测试?请在 loadDataWithBaseUrl() 之前设置一个 webchromeclient,如下所示: webview .setWebChromeClient(new WebChromeClient()); 对于 Javascript 调试,最好覆盖 WebChromeClient 中的 onConsoleMessage @user2281606 它在模拟器上运行良好。另外,我已经在设置 ​​webchrome 客户端。我在我的问题中编辑了代码。我尝试通过远程调试查看日志developers.google.com/web/tools/chrome-devtools/… 但没有日志 你有没有解决过这个@Eddybrtn?我看到的是一样的。我认为这与启用硬件加速有关,因为当我禁用硬件加速时,这些崩溃报告会消失……但是我的“慢速渲染”指标会飞涨……卡在岩石和坚硬的地方之间:-( @drmrbrewer 我想我们永远不会知道 【参考方案1】:

尝试覆盖后退导航功能并自行关闭弹出窗口。

您不需要处理所有堆栈导航逻辑,只需在显示此弹出窗口时设置一个状态即可。 应用您自己的导航逻辑(例如手动关闭弹出窗口)。

void onBackPressed()
    if(isTheBuggyPopupIsOn)
        closeTheBuggyPopup();
    
    else
        super.onBackPressed();
    

【讨论】:

【参考方案2】:
    webView.setWebViewClient(new MyBrowser());


public class MyBrowser extends WebViewClient 
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) 
            // TODO Auto-generated method stub

            if (url.equals(""YOUR URL)) 
                Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                startActivity(intent);
                return true;
             else 
                return false;
            

        

    

【讨论】:

【参考方案3】:

试试这个....

先添加这个

webView.setWebViewClient(new MyBrowser());

然后添加这个

public class MyBrowser extends WebViewClient 
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) 
            // TODO Auto-generated method stub

            if (url.equals(""YOUR URL)) 
                Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                startActivity(intent);
                return true;
             else 
                return false;
            

        

    

【讨论】:

它不起作用,回调没有捕捉到点击。请问您有进一步的解释吗?

以上是关于Android webview 崩溃“致命信号 5 (SIGTRAP)”的主要内容,如果未能解决你的问题,请参考以下文章

Android O 中的 WebView 崩溃

单击链接时,Android WebView 崩溃

android应用程序在webview url更改时崩溃

Android Webview 在三星和 Android 11 上崩溃

尝试退出插件 webview 时,带有集成插件的 Cordova 应用程序在 webview 上崩溃(android 测试)

[渲染过程中的Android P和Q中的Android WebView崩溃