为了让WebView访问快,通常都是用缓存技术,关于缓存这里有一篇文章讲的很详细 Android:手把手教你构建 WebView 的缓存机制 & 资源预加载方案,请务必看看css
缓存配置主要是web前端和后台设置,html
缓存配置主要是web前端和后台设置,前端
缓存配置主要是web前端和后台设置,android
重要的话须要说3遍,若是前端和后台没有配置缓存的话,通常http服务器有默认的配置,如Etag,Last-Modified字段,可是默认没有配置Cache-Control,或者Expires字段,那仍是要和服务器通讯的git
Android WebView自身缓存,也就是http协议缓存,这里有个很大缺陷是缓存空间大小不能修改,缓存大小默认是剩余空间的1/8,我的以为不够灵活,因此这块须要改进github
经过拦截全部静态资源请求,而后对其改进,经过覆盖WebViewClient下面的方法:web
@Override public WebResourceResponse shouldInterceptRequest(WebView view, String url){ return null; }
@TargetApi(Build.VERSION_CODES.LOLLIPOP)//21后调用 @Override public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request){ return null; }
而后拦截全部的静态资源,把静态资源放到本地磁盘,这样就能够本身控制缓存了,对于缓存分为两种模式浏览器
普通模式缓存
普通模式就是http协议的缓存默认,经过header里的缓存字段,先判断本地有没有,是否过时,没有过时从本地拿,过时了而后去服务器比较,比较完从服务器或着本地拿数据。若是web前端和后台没有设置缓存字段,还会有请求发生;服务器
强制模式
强制模式是忽略缓存字段,强制缓存静态资源,如js,css等。若是静态资源要更新,那就让其修改静态资源连接,如加md5值,加版本等,通常打包工具都有这个功能。这块对于html文件须要走普通模式,由于有些html文件名称不会改变,如index.html
我把这种实现封装成库,CacheWebView ,方便使用,欢迎你们拍砖;
两个步骤就可使用:
compile 'ren.yale.android:cachewebviewlib:2.0.5'
完毕,其余都不用修改。CacheWebView默认会有内部cache 100M的空间,同时缓存模式是http默认的模式