账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    Android WebView加载本地网页,第一次必发卡死问题?
    32
    0

    这是一个非常奇怪的问题!
    有两个必要前提条件,
    第一,必须是华为或三星的部分手机
    第二,必须是访问本地网页

    现象是,用上述品牌手机(华为mate8,9,;三星S6)访问这样一个本地网页:

    <html>
    <head>
        <title>测试JSAPI</title>
    </head>
    <body>
    
    <br/>
    <br/>
    <h2>打印时间</h2>
    <div>
        <p id="clock1"></p>
    </div>
    </body>
    <script type="text/javascript">
            function clock(){
                var clockp = document.getElementById("clock1");
                            var date = new Date();
                clockp.innerHTML=""+date;
            }
            window.setInterval("clock()",500);
    </script>
    </html>

    十分惊奇的发现,在上述品牌手机上,这个网页在手机应用中第一次被打开需要大概5-10秒钟的时间才开始打印时间。但第二次是立马就显示的,而且最奇怪的是我的在native里注册的onPageFinished早早就打印了,但是页面就是好像被什么东西阻塞住没有反应,并且界面确实已经完全展现出来了。
    对于这样的问题确实无从下手,希望大佬们帮忙看看这是咋回事呢?实在不解。

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 沫年℅夏至未至 普通会员 1楼

      在Android中,WebView加载本地网页时,由于其自身的性能和优化机制,可能会遇到一些问题,其中最常见的就是第一次访问或加载本地网页时出现必发卡死的现象。以下是可能导致此问题的一些原因和解决方法:

      1. 网络问题:WebView需要连接到本地服务器或网络,如果网络连接不稳定或速度慢,可能会导致网页加载慢或无法加载完全,从而出现必发卡死现象。解决方法:检查网络连接,确保网络信号稳定且网络带宽充足。可以尝试使用网络调试工具,如adbWireshark查看网络数据,确认网络连接状态和带宽。如果可能,尝试将网络连接切换到其他网络环境,如移动热点或网络质量较好的区域,以提高网页加载速度。

      2. 页面解析问题:在加载本地网页时,可能会遇到页面解析错误或延迟,导致网页加载速度慢或无法加载完全。解决方法:在WebView的onPageFinished或onPageStarted方法中,对页面进行解析和渲染。可以使用Java的Jsoup库或XMLHttpRequest对象等方法进行页面解析,确保页面内容和样式正确无误。在解析过程中,可以适当添加异步加载或懒加载特性,如在解析过程中利用WebView的suspend/on resume机制,避免一次性加载所有页面内容,提高网页加载速度。

      3. 资源加载问题:本地网页可能包含大量的图片、视频、字体等资源,如果加载资源时加载速度过慢,可能会导致网页加载慢或出现必发卡死现象。解决方法:对于大型的资源,可以考虑分块加载,将资源分为多个部分,每次加载一部分,每次加载完毕后再继续加载下一部分。对于大型图片或视频,可以考虑使用webp或WebP Image等技术,降低资源加载量,提高网页加载速度。在设置WebView的contentProvider时,可以将资源存储在本地,然后在需要加载时从本地读取资源。

      4. Web服务器性能问题:如果Web服务器的处理能力不足,无法满足WebView的性能需求,可能会导致WebView加载本地网页时出现必发卡死现象。解决方法:检查Web服务器的性能设置,确保服务器的处理能力足以满足WebView的需求。可以调整Web服务器的配置,如CPU、内存、带宽等资源参数,或者升级Web服务器的硬件配置,提高服务器性能。

      5. 其他性能优化措施:除了上述原因,还可以通过其他性能优化措施来提高WebView加载本地网页的性能,如优化WebView的渲染引擎,减少不必要的UI绘制,避免频繁的重绘和滚动操作,使用缓存技术,使用JavaScript或CSS的异步加载等。同时,对于较大的网页,也可以考虑使用HTTP/2等技术,以提高网络传输效率和网页加载速度。

      综上所述,对于Android WebView加载本地网页时出现必发卡死的问题,需要综合考虑网络、页面解析、资源加载、Web服务器性能等因素,找出问题的根本原因,并采取相应的优化措施,以提高WebView的性能和用户体验。同时,也可以考虑使用第三方工具或服务,如WebViewLoader或Scribe,进行性能监控和优化,以进一步提高WebView的性能。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部