关于webview缓存文件

最近做了一个资源缓存,将webview加载的网页中的资源缓存到手机上。当加载webview时,用手机中的资源替换请求的资源。

方案

每次打开APP,在手机保存一份需要缓存的url和一个版本号。通过map(url,ver)保存到手机。通过webview的方法shouldInterceptRequest()拦截到需要保存的url,将网页的资源保存到手机上。之后每次进入APP,比较ver,看是否需要更新资源。

流程

每次开启app,服务器传一份需要保存的资源,对应url和ver。将数据保存到手机。
之后每次打开app下载到的数据都需要跟之前保存的数据进行比较,看是否需要资源的替换。
将第一次保存的数据看做 localMap(url,ver),以后每次打开的app保存的数据看做netMap(url,ver)。

shouldInterceptRequest(WebView view, String url){
//拦截到请求的url

                for(遍历netMap){
                        if(新的URL == 拦截的url){
                        //说明这个url使我们需要关心的,接着跟localMap中的url做比较,看是否需要更新
                        for(遍历localMap){
                            if(旧的url == 新的url){
                                    比较新的ver和旧的ver是否相同
                                    if(不一样){
                                        将路径的资源下载到手机
                                        将旧的ver改成新的
                                    }
                                    else if(手机上没有这个资源){
                                          将路径的资源下载到手机
                                    }
                 这时已经将资源下载到了手机,用手机中的资源替换webview请求的资源
                            }
                        }

                        }
                }

}
//将资源保存到手机
 public void downtoPhone(String url, String filename) {
        try {                 
     URL u = new URL(url);
     InputStream is = u.openStream();
     File file = new File(getDiskCacheDir(PlayGameActivity.this), filename);
     OutputStream os = new FileOutputStream(file);  
     byte[] buff = new byte[1024];
     int hasRead = 0;
      while ((hasRead = is.read(buff)) > 0) {
      os.write(buff, 0, hasRead);
            }
            is.close();
            os.close();

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //资源存储的文件位置
     public String getDiskCacheDir(Context context) {
        String cachePath = null;
        if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())
                || !Environment.isExternalStorageRemovable()) {
            cachePath = context.getExternalCacheDir().getPath();
        } else {
            cachePath = context.getCacheDir().getPath();
        }
        return cachePath;
    }
//用手机本地资源替换webview请求的资源
    FileInputStream fis = new FileInputStream(file);
    response = new WebResourceResponse(资源对应的mime类型, "UTF-8", fis);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值