美文网首页
WebView 遇到的问题

WebView 遇到的问题

作者: 笑叶林 | 来源:发表于2018-07-10 12:00 被阅读16次

    onPageStarted() 被调用多次问题:

    因为网址的加载过程中存在重定向问题,所以会被调用多次。 这个是不可避免的,重定向后都是一个新的网址,肯定会重新再调用 onPageStarted()

    如果在这个方法里面涉及到一些逻辑,尽可能在这个逻辑里面加入一些判断,保证想要执行的逻辑只执行一次,这也是有益于程序的。

    @Override 
    public void onPageStarted(WebView view, String url, Bitmap favicon) { 
        progressBar.setVisibility(VISIBLE); 
        progressBar.setProgress(0); 
    
        if(!isLoading) { 
            //isLoading 默认为false 
            isLoading = true; 
            ... 
            ... 
            //执行只需要执行一次的逻辑 
        } 
    
    } 
    

    // 然后在onPageFinished()

    isLoading = false; 
    

    在onPageStarted() 调用 webView.canGoBack()返回 false 问题

    有时在加载网址的时候,需要对当前webview的状态进行判断,例如,自定义了一些前进、后退按钮,便需要实时的刷新按钮,需要在网址发生变化时监听webView。

    在onPageStarted()里设置监听,去获取webView 的状态,但是有时会出现上述问题,明明webview是可以返回的,在onPageStarted()里获取的值为false。

    解决方案: 经过测试onProgressChanged()方法的调用情况,发现在网络的加载进度在30%左右以后,canGoBack() 才返回 true;所以可以在onProgressChanged() 里加入监听,或是在onPageFinished()里去监听 webView的状态。

    在onPageFinished() 里去设置progressBar 不可见,仍然看到进度条显示出来。

    问题出现的原因,有些不清楚为什么,但是在设置的时候更改为以下便可以。

    progressBar.setVisibility(View.GONE); 
    

    所以在自行设置的时候,可以设置progressBar 为GONE 而不是INVISIBLE;

    在一些低版本上,会出现webview 销毁时 程序发生crash的情况:

    此类情况的出现,往往是webview销毁时出现了问题,可以仔细检查下自己代码的编写。

    webView销毁代码示例:

    if (webView != null) { 
        // 要首先移除 
        removeView(webView); 
    
        // 清理缓存 
        webView.stopLoading(); 
        webView.onPause(); 
        webView.clearHistory(); 
        webView.clearCache(true); 
        webView.clearFormData(); 
        webView.clearSslPreferences(); 
        WebStorage.getInstance().deleteAllData(); 
        webView.destroyDrawingCache(); 
        webView.removeAllViews(); 
    
        // 最后再去webView.destroy(); 
        webView.destroy(); 
    } 
    

    若是 webView.destroy() 放在了前面,则就会出现错误,需要把webView.destroy()放在最后面。

    相关文章

      网友评论

          本文标题:WebView 遇到的问题

          本文链接:https://www.haomeiwen.com/subject/vtefpftx.html