关于android_webview,html5_appcache

什么是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中以 CACHE MANIFEST 开头;#号后面写注释;
CACHE:表示标注了哪些资源文件需要被缓存,可以列出多个。 但必须是绝对路径表示,不支持通配符。
     NETWORK:定义了哪些文件不需要缓存,这些文件需要与服务器连接,与CACHE一样,可以定义多个资源,可以使用通配符*表示除CACHE以外

的所有资源都必须通过服务器获取。(注意,还有调用了.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以后被废弃,网上大部分老帖子还是用到了这两个方法,在此仅供参考。下面是这几个方法的文档说明,这里一起贴出来:




下面来看看生成的ApplicationCache.db文件结构和数据库结构:


在手机浏览index.html时缓存信息被加载到数据库中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值