Android WebView页面加载优化

转载 2015年11月25日 15:13:48

转自:http://blog.csdn.net/dliyuedong/article/details/46947007


目前webapp越来越多,体验也越来越好,为了能够更好的使用WebView展示出流畅的的页面,可以从以下几点做优化:

  • WebView缓存
  • 资源文件本地存储
  • 减少耗时操作
  • 客户端UI优化

可能有人会说了,为什么不做成native的呢,这样就不用那么的麻烦了。如果我需要加载的内容都是静态的,当然做成native的是最好的,为什么我们要使用WebView呢,因为它可以加载一些容易改变的内容,同时也方便制作多平台应用。

WebView可以优化的哪些地方呢?

WebView缓存

开启WebView的缓存功能可以减少对服务器资源的请求,一般使用默认缓存策略就可以了。

//设置 缓存模式 
webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);  
// 开启 DOM storage API 功能 
webView.getSettings().setDomStorageEnabled(true); 

资源文件本地存储

资源等文件(不需要更新)本地存储,在需要的时候直接从本地获取。哪些资源需要我们去存储在本地呢,当然是一些不会被更新的资源,例如图片文件,js文件,css文件,替换的方法也很简单,重写WebView的方法即可。

{
      try {
          if (url.endsWith("icon.png")) {
              InputStream is = appRm.getInputStream(R.drawable.icon);
              WebResourceResponse response = new WebResourceResponse("image/png",
                "utf-8", is);
              return response;
          } else if (url.endsWith("jquery.min.js")) {
              InputStream is = appRm.getInputStream(R.raw.jquery_min_js);
              WebResourceResponse response = new WebResourceResponse("text/javascript",
                "utf-8", is);
              return response;
          }
          } catch (IOException e) {
                 e.printStackTrace();
          }
          return super.shouldInterceptRequest(view, url);
}
  1. appRm为app资源管理器,读取drawable,assets,raw下的资源,都是android系统的一些很简单的函数调用。

  2. getInputStream的参数代表资源具体位置

  3. WebResourceResponse后的资源类型需要写正确

有些时候我们会为我们的网站加入一些统计代码,这些也可以精简掉(自己使用的CNZZ的大概占的有10k左右),可以使用Charles对客户端进行抓包查看。

减少耗时操作

准确的说,是减少同步操作的操作时间,尽量使用异步操作替代同步操作。如果服务端存在读取数据库和计算耗时的操作,尽量使用异步(ajax)进行操作,把原本的时间花在异步操作上。

举个例子,A页面到B页面,A页面实现登录功能,B页面展示主功能页面,如果让B页面去进行用户登录信息验证的话,B页面加载时间会加长(数据库查询等操作),同时客户端可能需要提供一个等待框(或进度条等)给用户,那看看在A页面使用异步操作的优势吧:

  • 可以提供统一的js等待框,多平台保持一致性,减少客户端代码工作量。
  • 加载页面的时间变短。B页面由于减少了耗时的操作,加载时间变短,用户等待时间也变短。
  • 可以方便加入一些验证后的控制逻辑,不需要进行页面跳转。A页面可以根据异步操作进行结果判断,做出相应的处理。

客户端UI优化

怎么让用户看不到WebView加载前的白色页面呢?首次加载后页面的跳转可以用上面的步骤进行优化,可以提供给用户一个很好的体验,那加载的第一页呢?我们需要WebView预加载页面,这个该怎么做到的呢?下面提供两种方法:

  • ViewPager,将欢迎页面与WebView页面一起放进ViewPager中,设置预加载页面个数,使WebView所在页面可以预加载,在加载完毕的时候切换到WebView所在页面。
  • FrameLayout,将欢迎页面与WebView页面的布局合在一起,显示在一个页面内,起始隐藏WebView布局,待WebView加载完毕,隐藏欢迎布局,显示WebView布局。

使用FrameLayout简单一些,两种方法都是需要对WebChromeClient的onProgressChanged进行监听,加载完毕进行页面切换,如下:

  webView.setWebChromeClient(new WebChromeClient() {
        @Override
        public void onProgressChanged(WebView view, int newProgress) {
            super.onProgressChanged(view, newProgress);
            if (newProgress >= 100) {
                // 切换页面
            }
        }
    });

经过以上几步的优化,一个流畅的webapp生成了。


Android WebView页面加载优化

目前webapp越来越多,体验也越来越好,为了能够更好的使用WebView展示出流畅的的页面,可以从以下几点做优化: WebView缓存资源文件本地存储减少耗时操作客户端UI优化 可能有人...
  • dliyuedong
  • dliyuedong
  • 2015年07月18日 22:46
  • 41149

android webview优化之路

前言 随着app的迭代,嵌入的html5界面越来越多了,Webview这个强大组件引起的问题越发的多起来,例如: 1、WebView导致的oom问题 ...
  • u013519084
  • u013519084
  • 2016年02月18日 16:19
  • 269

Android 开发中OOM---WebView优化之路

最近Android项目中嵌入的html5界面越来越多了,Webview这个强大组件引起的问题越发的多起来,最常见的就是WebView引起的OOM问题。众所周知,Android WebView一直以来都...
  • lvmingci
  • lvmingci
  • 2016年10月09日 14:57
  • 1546

Android WebView 性能优化

原文出处:http://motalks.cn/2016/09/11/Android-WebView-JavaScript-3/Mo说:大家通过前两篇文章想必都能顺利的 get 到 WebView 与 ...
  • axi295309066
  • axi295309066
  • 2016年10月07日 18:33
  • 1613

Android WebView先加载网页文字,后加载图片

WebView首先加载文字,后加载图片
  • yang786654260
  • yang786654260
  • 2015年05月29日 16:00
  • 1800

Android WebView:性能优化不得不说的事

原文链接:http://motalks.cn/2016/09/11/Android-WebView-JavaScript-3/ 版权归作者所有! Mo说:大家通过前两篇文章想必都能顺利的 ...
  • u012210186
  • u012210186
  • 2016年09月21日 14:48
  • 11229

WebView性能优化

本系列文章讨论WebView的各种用法以及使用技巧
  • AllenWells
  • AllenWells
  • 2016年07月29日 09:36
  • 2094

Android WebView开发问题及优化汇总

我们在native与网页相结合开发的过程中,难免会遇到关于WebView一些共通的问题。就我目前开发过程中遇到的问题以及最后得到的优化方案都将在这里列举出来。有些是老生常谈,有些则是个人摸索得出解决方...
  • xyz_lmn
  • xyz_lmn
  • 2014年09月24日 11:44
  • 39511

WebView加载速度优化

离线缓存 WebSettings settings = webView.getSettings(); settings.setAppCacheEnabled(true); settings.se...
  • qq_32973011
  • qq_32973011
  • 2017年05月17日 15:10
  • 465

系统架构 优化js的 优化web页面加载速度

系统架构 1、客户层       js, css, data的结合       js数据模版      html模版       js加载效率的提升, 因为在无法避免js的数量的增多...
  • LiSped
  • LiSped
  • 2013年03月14日 09:02
  • 1849
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android WebView页面加载优化
举报原因:
原因补充:

(最多只允许输入30个字)