WebView踩坑系列(一)

来源:互联网 发布:c语言百分号什么意思 编辑:程序博客网 时间:2024/06/07 02:40

WebVeiw的缓存清理

webView的缓存有两种形式,页面内容缓存以及账号Cookie缓存,所以缓存清理分两种形式。情形一:例如某个app软件切换账号后发现用户界面显示的还是之前一个用户的数据,这时需要使用Cookie清理;另一种情形是,第一次加载网页时是一个样式,当前端修改网页的样式之后,如果不进行缓存清理,可能加载的还是第一次加载的样式,这时需要进行内容缓存清理。

一:Cookie缓存清理
在切换账号的时候,页面可能会保存上一个账号的信息,可以使用下面的方法进行缓存清理。
    @SuppressWarnings("deprecation")    public static void clearCookies(Context context, WebView webView){        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {            CookieManager.getInstance().removeAllCookies(null);            CookieManager.getInstance().flush();        } else{            CookieSyncManager cookieSyncMngr=CookieSyncManager.createInstance(context);            cookieSyncMngr.startSync();            CookieManager cookieManager = CookieManager.getInstance();            cookieManager.removeAllCookie();            cookieSyncMngr.stopSync();            cookieSyncMngr.sync();        }     }
二:内容缓存清理

webview缓存的内容主要包括网页中的css渲染、图片和javascript
交互。

在webView的属性设置里面:

缓存模式(5种)

LOAD_DEFAULT: 默认的缓存使用模式。如果没有使用setCacheMode方法,当内存资源可用且不过期,则从内存中获取资源;否则从网络加载资源。使用{ @link # setCacheMode }。
LOAD_NO_CACHE: 不使用缓存,只从网络获取数据.
LOAD_CACHE_ONLY: 不使用网络,只读取本地缓存数据
LOAD_CACHE_NORMAL: API level 17中已经废弃, 从API level 11开始作用同LOAD_DEFAULT模式
LOAD_CACHE_ELSE_NETWORK:当内存资源可用时,无论是否过期,都从内存中获取;否则从网络上获取。

总结:当设置cacheMode为LOAD_NO_CACHE时,该状态下不使用缓存,当cacheMode设置为其他状态时,从内存中读取资源。

属性设置如下:

public void setFeathue(){    settings.setCacheMode(WebSettings.LOAD_DEFAULT);    //cacheMode可以设置其他属性,除了LOAD_NO_CACHE之外        .        .        .    settings.setDatabaseEnabled(true);    settings.setDomStorageEnabled(true);    settings.setAppCacheEnabled(true);    settings.setAppCachePath(WEB_APP_CACHE_PATH);    settings.setDatabasePath(WEB_DATA_CACHE_PATH);}

清除缓存代码如下:

     public void clearWebViewCache(){              //清理Webview缓存数据库              deleteDatabase("webview.db");               deleteDatabase("webviewCache.db");              File cacheFile = new File(getFilesDir().getAbsolutePath()+WEB_APP_CACHE_PATH);        File dataFile = new File(getCacheDir().getAbsolutePath()+WEB_DATA_CACHE_PATH);        if(cacheFile.exists()){            deleteFile(cacheFile);        }        if(dataFile.exists()){            deleteFile(dataFile);        }     }      /**      * 删除文件或文件夹      * @param file      */       public void deleteFile(File file) {             if (file.exists()) {              if (file.isFile()) {                  file.delete();              } else if (file.isDirectory()) {                  File files[] = file.listFiles();                  for (int i = 0; i < files.length; i++) {                      deleteFile(files[i]);                  }              }              file.delete();          }     }  

以上为webview清除缓存方法,若有不足之处欢迎指正,也欢迎大家给我留言,共同探讨问题。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 个人怎么办对公账户 车辆超过年检日期怎么办 手机cpu负载过高怎么办 移动数据上网慢怎么办 服务器密码忘记了怎么办 网吧电脑卡死了怎么办 局域网连接不上怎么办 电脑没有dns地址怎么办 无法连接版本服务器怎么办 登录游戏就死机怎么办 亿企薪税保没有绑定企业怎么办 众筹如果不成功怎么办 淘宝被投诉商标权怎么办 茅台贴标褶皱怎么办 ins取不了名字怎么办 ins密码忘了怎么办 ins不记得密码怎么办 ins账号被停用怎么办 电脑登录不上怎么办 电脑桌面密码忘记了怎么办 苹果电脑用户名忘记了怎么办 w7电脑忘记密码怎么办 电脑win10忘密码怎么办 win7账号被停用怎么办 淘宝号忘了怎么办 xp忘记系统密码怎么办 u盘忘记密码怎么办 mac系统密码忘记怎么办 电脑用户名密码忘记怎么办 win7用户名密码忘记怎么办 用户名密码忘记了怎么办 电脑用户名忘记了怎么办 win10系统忘记用户名怎么办 邮件不显示主旨怎么办 电脑被停用了怎么办 电脑密码被锁怎么办 拨号密码忘记了怎么办 xp忘记admin密码怎么办 wps表格不能编辑怎么办 微信号注销失败怎么办 微信无法注销怎么办