CacheWebView-Android WebView 缓存实现方案
2017-11-17 23:23 阅读(286)

CacheWebView是Android WebView 缓存的自定义实现,通过拦截静态资源进行内存(LRU)和磁盘(LRU)2级缓存实现缓存。突破系统WebView缓存的空间限制,让缓存更简单、更快、更灵活。让网站离线也能正常访问。

为什么要用CacheWebView

使用方式,很简单

引入库

compile 'ren.yale.android:cachewebviewlib:1.2.3'

修改代码

完毕,因为CacheWebView继承WebView,其他都不用修改。CacheWebView默认会有内部cache200M 磁盘缓存空间,20M内存缓存空间。同时缓存模式是http默认的缓存模式。


进阶

File cacheFile = new File(this.getCacheDir(),"cache_path_name");

CacheWebView.getCacheConfig().init(this,cacheFile.getAbsolutePath(),1024*1024*100,1024*1024*10)
.enableDebug(true);//100M 磁盘缓存空间,10M 内存缓存空间
CacheWebView.cacheWebView(this).loadUrl(URL);//要放在UI线程

或者

 CacheWebView.servicePreload(this,URL);//通过启动Service来预加载,不影响UI线程
CacheWebView webview;
webview.setCacheStrategy(WebViewCache.CacheStrategy.FORCE);

默认磁盘缓存静态资源后缀有:html,htm,js,ico,css,png,jpg,jpeg,gif,bmp,ttf,woff,woff2,otf,eot,svg,xml,swf,txt,text,conf

可以添加删除,addExtension,removeExtension

默认内存缓存静态资源后缀有:html,htm,js,css,xml,txt,text,conf

可以添加删除,addRamExtension,removeRamExtension

webview.getWebViewCache().getStaticRes().addExtension("swf").removeExtension("svg")
                .addRamExtension("png").removeRamExtension("html");
webview.setCacheInterceptor(new CacheInterceptor() {
            public boolean canCache(String url) {
                return true;
            }
 });
CacheWebView webview;
webview.clearCache();
CacheWebView webview;
webview.loadUrl(URL,getHeaderMap(URL));
@Override
 public boolean shouldOverrideUrlLoading(WebView view, String url) {
     CacheWebView v = (CacheWebView) view;
     v.loadUrl(url,getHeaderMap(url));
     return true;
 }

默认没有阻塞图片加载,setBlockNetworkImage(true)后。在页面onPageStarted时阻塞图片加载,onPageFinished时打开图片加载

CacheWebView webview;
webview.setBlockNetworkImage(true);
CacheWebView webview;
webview.setEnableCache(true);
CacheWebView webview;
webview.setUserAgent("Android");
CacheStatus cacheStatus =  webview.getWebViewCache().getCacheFile(URL);
 if (cacheStatus.isExist()){
    File file = cacheStatus.getCacheFile();
    String extension = cacheStatus.getExtension();
 }
CacheWebView webview;
webview.destroy();
CacheWebView.getCacheConfig().setEncodeBufferSize(1024);

流程图

CacheWebView流程图


github: https://github.com/yale8848/CacheWebView?utm_source=gold_browser_extension