android WebView(六)下载和缓存


WebView下载

有时候你所加载的页面有下载链接,如果你需要响应点击后下载的功能则需要进行如下处理:
		webView.setDownloadListener(new DownloadListener() {
			@Override
			public void onDownloadStart(String url, String userAgent,
					String contentDisposition, String mimetype,
					long contentLength) {
				if (url != null && url.startsWith("http"))
				{
					startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
				}
			}


		});

上面代码是调用系统的浏览器进行下载的,无论如何我们通过设置DownloadListener可以监听到下载的事件,并且获取到要去下载的链接url,所以我们完全可以自己去开启线程自己去下载,具体怎么下载我就不多说了。

WebView缓存

如果WebView每次请求都重新加载数据的话,这样就会很耗流量和时间。WebView提供了缓存机制,缓存在data/data下的的文件结构如下:我们请求的Url记录是保存在webviewCache.db里,而url的内容是保存在webviewCache文件夹下。
技术分享


WebView中存在着两种缓存:网页数据缓存(DOM Storage)、H5缓存(即AppCache)。

AppCache使我们能够有选择的缓冲web浏览器中所有的东西,从页面、图片到脚本、css等等。尤其在涉及到应用于网站的多个页面上的CSS和JavaScript文件的时候非常有用。其大小目前通常是有限制的。在Android上需要手动开启(setAppCacheEnabled),并设置路径(setAppCachePath)和容量(setAppCacheMaxSize)Android中Webkit使用一个db文件来保存AppCache数据(my_path/ApplicationCache.db)

DOMStorage存储一些简单的用key/value对数据。根据作用范围的不同,有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)。

5种缓存模式
LOAD_CACHE_ONLY:  不使用网络,只读取本地缓存数据
LOAD_DEFAULT:  根据cache-control决定是否从网络上取数据。
LOAD_CACHE_NORMAL: API level 17中已经废弃, 从API level 11开始作用同LOAD_DEFAULT模式
LOAD_NO_CACHE: 不使用缓存,只从网络获取数据.
LOAD_CACHE_ELSE_NETWORK,只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据。
如:www.taobao.com的cache-control为no-cache,在模式LOAD_DEFAULT下,无论如何都会从网络上取数据,如果没有网络,就会出现错误页面;在LOAD_CACHE_ELSE_NETWORK模式下,无论是否有网络,只要本地有缓存,都使用缓存。本地没有缓存时才从网络上获取。

www.360.com.cn的cache-control为max-age=60,在两种模式下都使用本地缓存数据。


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。