什么是AppCache?
AppCache就是对app内存缓存的方案,具体表现为当请求某个文件时不是从网络获取该文件,而是从本地获取。摘自这里
服务器怎么用AppCache?
1.首先需要在服务器上建立一个文件,里面的内容确定了哪些文件需要缓存,哪些文件不需要,如果资源无法访问会使用什么页面等这个文件为.appcache类型,称为缓存清单(cache manifest)文件。文件名称任意,例如,我这里定义的是demo.appcache 如下:
CACHE MANIFEST
# #号后跟注释
CACHE:
column1/article1/part/pic11.jpg
column1/article2/part/pic12.jpg
column1/article3/part/pic13.jpg
column1/article4/part/pic14.jpg
column1/article5/part/pic15.jpg
NETWORK:
*
FALLBACK:
/ 404.html
这里要说明的是:
的所有资源都必须通过服务器获取。(注意,还有调用了.appcache文件的页面也会被缓存,后面会是有示例说明)
FALLBACK:指定了一个后备页面,当资源无法访问时,浏览器会使用该页面。可以定义多条记录,每条记录列出两个URI,一个表示资源,一个表示后备页面。需要注意的是两个资源文件都需要使用相对路径且与manifest文件同源。可以使用通配符。
2.定义好.appcache文件以后,就可以在页面中引用了,如下:
<html manifest="demo.appcache">
在html标签中加入manifest=“你的appcache文件”,这里可以填绝对路径(如下面的index.html就是使用的绝对路径)也可填相对路径(如下面的content21.html就是使用相对路径的写法,这里两个使用的都是根目录下的demo.appcache文件),只要在加载时服务器能找到就行。
这时服务器端的工作就做完了。用谷歌浏览器可以看出当读取到带有引用appcache的页面时会执行缓存操作:
这里我们可以看到:CACHE下要缓存的资源(一沓jpg文件),FALLBACK下的后备资源(404.html),以及主目录(CacheManifest),appcache文件(demo.appcache),引用了appcache的页面(这里是index.html,content21.html)都被缓存进来了。注意这里只是加载index.html页面,没有加载content21.html,但是这个页面还是被找到发现引用了appcache并被缓存下来了。
这里关于html5的离线功能就说到这里,想继续深入可以参考这个链接,还有这个链接。
android怎么用AppCache?
webView = (WebView) findViewById(R.id.webview);
WebSettings settings = webView.getSettings();
//设置Html5 appcache缓存
settings.setAppCachePath(getCacheDir().getPath());//设置缓存目录,会在该目录下生成ApplicationCache.db文件,缓存的信息就在这里
settings.setAppCacheMaxSize(20 * 1024 * 1024); //设置缓存大小
settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);//设置缓存模式
settings.setAppCacheEnabled(true); //开启对appcache的支持
//缓存扩容
webView.setWebChromeClient(new WebChromeClient(){
@Override
public void onReachedMaxAppCacheSize(long requiredStorage, long quota, WebStorage.QuotaUpdater quotaUpdater) {
quotaUpdater.updateQuota(requiredStorage*2);
}
});
//加载页面
webView.loadUrl("http://192.168.0.101:8080/CacheManifest/index.html");
这里需要说明的是,网上的帖子没有强调setAppCachePath() , setAppCacheEnabled()这两个方法调用的先后顺序。但是我做的时候如果两个顺序倒过来的话,是不会在制定目录上生成.db文件的。希望大家编程的时候留意一下。再者是setAppCacheMaxSize(),OnReachedMaxAppCacheSize()这两个跟缓存容量大小有关的函数在API LV18以后被废弃,网上大部分老帖子还是用到了这两个方法,在此仅供参考。下面是这几个方法的文档说明,这里一起贴出来: