Android WebViewはオフラインロード機能を実現
3499 ワード
Androidの開発では、いくつかのページを使用してデータを表示することは避けられませんが、一部のページの内容は基本的に変わらない可能性があります.ロードするたびにリソースを消費し、トラフィックを消費します.ネットワークが悪いとユーザー体験が悪くなります.このとき、適切にキャッシュを使う必要があります.androidもiOSのWebViewもオフラインキャッシュの機能をよく実現しています.私たちがしなければならないのは~を設定することだけです.
AndroidのWebViewキャッシュは手動で開く必要があります.
AndroidのWebViewキャッシュは手動で開く必要があります.
String cacheDirPath = getFilesDir().getAbsolutePath() + APP_CACAHE_DIRNAME;
WebSettings settings = webView.getSettings();
//データベースキャッシュパスsettingsを設定.setDatabasePath(cacheDirPath);//App Cachesキャッシュディレクトリa settingsを設定.setAppCachePath(cacheDirPath);//App Caches機能settingsを起動する.setAppCacheEnabled(true); 这样就打开了缓存功能,接下来就是设置缓存模式了,android中共有五种缓存模式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模式下,无论是否有网络,只要本地有缓存,都使用缓存。本地没有缓存时才从网络上获取。开发者可以根据自己app 的需要来设置不同的缓存模式,我的实现是如果网络是Wi-Fi,使用默认模式,如果是3g或没有网络则优先加载缓存
このような利点は、ロード速度を保証し、トラフィックを節約できることであるが、実際に最初に実現したいのは、ロードするウェブページリソースが一定時間変化しなければキャッシュされたリソースをロードし、変化があればネットワーク上のリソースをロードすることであり、要求メッセージヘッダif-Modified-Sinceを設定することによって実現するのが理想的であるが、成功しなかった.どなたかご存知の方いらっしゃいましたら、下にコメントを残していただき、ありがとうございます~if (isWIFIkAvailable(WebViewLoadActivity.this)) { // settings.setCacheMode(WebSettings.LOAD_DEFAULT); // ( cache-control 。) } else { // settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); // ( , , no-cache, 。) }