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,在两种模式下都使用本地缓存数据。