美文网首页
Android WebView异常监听兼容性处理

Android WebView异常监听兼容性处理

作者: IIGEOywq | 来源:发表于2017-12-14 17:04 被阅读739次

    一 前言

    为了提高Android webview异常情况对于用户的友好度,可以从两个方面入手,一是服务端统一处理,一是客户端监听异常状态加载相应的本地404或者超时页面。
    由于我们的App是政务类平台,所以会接入大量第三方服务(而且是政府部门相关网页),标准不一样,基于上述业务场景,服务端的解决办法,实现难度太高。
    因此只能从客户端入手解决,下面我们开始做客户端处理。

    二 Webview的版本bug

    由于android webview 早期的不成熟,在6.0以下自身存在bug(https://code.google.com/p/android/issues/detail?id=968
    )的原因,android开发者们通过查看官方文档,总结了一些异常兼容性处理方法;详情参考这边文章 http://www.jianshu.com/p/5c16e02ed422

    • Android6.0以上判断404或者500
      重写WebViewClient()的onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse)方法,通过状态码判断;
    • Android 6.0以下判断404或者500
      重写WebChromeClient()的onReceivedTitle(WebView view, String title)方法,通过标题是否包含“404”,"500","error"等字符判断;
    • 断网或者超时判断(注意404或者500等其他非断网超时情况不走这个方法)
      重写WebViewClient() 的onReceivedError(WebView view, int errorCode, String description, String failingUrl)

    三 兼容性测试

    以上操作看起来都很顺利,其实是我天真了,我们开始测试

    3.1 6.0以上系统测试

    问题:
    1.先看404的情况,果然进了onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse)方法,但是问题来了,正常的页面也返回404,去查了一下官方文档,发现一个请求页面任何资源的加载都会引发HTTP ERROR都会引起该方法的回调(例如页面的内部请求图标,或者图片等),
    解决方法:
    通过判断当前请求的url地址request.getUrl()是否等于根url,但是有一些请求地址通过request.getUrl()获取的url不等于根url,这个目前还没找到好的办法;

    3.2 6.0以下系统测试

    问题
    1.先看404的情况,onReceivedTitle,这个方法还是有个别服务返回的标题不包含“404”,"500","error"等字符,暂时也没有好的解决方法;

    3.3 超时测试

    问题:
    onReceivedError监听超时情况,需要很长时间,而webview请求的超时时间也不能控制,太影响用户体验;
    解决办法:
    在WebViewClient的onPageStarted(改方法是每个请求地址开始时调用),开启一个线程,设置一个时间监听,当超过这个时间,加载超时页面;

    参考文章:

    [1]http://www.jianshu.com/p/5c16e02ed422
    [2]https://jiandanxinli.github.io/2016-08-31.html

    相关文章

      网友评论

          本文标题:Android WebView异常监听兼容性处理

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