王立平--WebView的缓存机制
1. 页面缓存是指载入一个网页时的html、JS、CSS等页面或者资源数据。
这些缓存资源是因为浏览器的行为而产生。开发人员仅仅能通过配置HTTP响应头影响浏览器的行为才干间接地影响到这些缓存数据。
他们的索引存放在/data/data/package_name/databases下。
他们的文件存放在/data/data/package_name/cache/xxxwebviewcachexxx下。目录的名字在2.x和4.x上有所不同,但都目录名字中都包括webviewcache。
2. 数据缓存分为两种:AppCache和DOM Storage(Web Storage)。他们是由于页面开发人员的直接行为而产生。全部的缓存数据都由开发人员直接全然地掌控。
AppCache使我们可以有选择的缓冲web浏览器中全部的东西。从页面、图片到脚本、css等等。尤其在涉及到应用于站点的多个页面上的CSS和JavaScript文件的时候很实用。
其大小眼下一般是5M。
在Android上须要手动开启(setAppCacheEnabled)。并设置路径(setAppCachePath)和容量(setAppCacheMaxSize)
Android中Webkit使用一个db文件来保存AppCache数据(my_path/ApplicationCache.db)
假设须要存储一些简单的用key/value对就可以解决的数据,DOM Storage是很完美的方案。依据作用范围的不同。有Session Storage和Local Storage两种,分别用于会话级别的存储(页面关闭即消失)和本地化存储(除非主动删除,否则数据永远不会过期)。
在Android中能够手动开启DOM Storage(setDomStorageEnabled),设置存储路径(setDatabasePath)
Android中Webkit会为DOM Storage产生两个文件(my_path/localstorage/http_h5.m.taobao.com_0.localstorage和my_path/localstorage/Databases.db)
在Android中清除缓存时,假设须要清除Local Storage的话,只删除Local Storage的本地存储文件是不够的,内存里面有缓存数据。假设再次进入页面,Local Storage中的缓存数据相同存在。须要杀死程序执行的当前进程再又一次启动才干够。
- WebSettings webseting = m_webview .getSettings();
- webseting.setDomStorageEnabled(true);
- webseting.setAppCacheMaxSize(1024*1024*8);//设置缓冲大小,我设的是8M
- String appCacheDir = this.getApplicationContext().getDir("cache", Context.MODE_PRIVATE).getPath();
- webseting.setAppCachePath(appCacheDir);
- webseting.setAllowFileAccess(true);
- webseting.setAppCacheEnabled(true);
- webseting.setCacheMode(WebSettings.LOAD_DEFAULT);