私は、(少なくとも) 一部が Web アプリであり、ネイティブ アプリを装ったネイティブ アプリを構築しています。Facebook は適切なキャッシュを使用することがいかに重要かを示しましたが、私は Web ページをキャッシュしているので、2 回目にロードしたときにアプリのネイティブ部分のように感じられます。ただし、私が設定した方法では、キャッシュされたコンテンツは永続的です。そのため、サーバーで何かを変更しても、キャッシュされた古いコンテンツが引き続き表示されます。
これが私が達成したいことであり、1が最も望ましいものです。
- EITHER キャッシュされたコンテンツが最初に表示されます。バックグラウンドで、ページは新しいバージョンをチェックしますが、コンテンツが異なる場合にのみリロードします。
- またはキャッシュされたコンテンツが最初に表示されます。バックグラウンドでページが更新され、再読み込みされます。
- または、キャッシュされたコンテンツが X 時間 (1 週間?) 後に消去され、ページが強制的にリロードされます。
最後のオプションは、ページがリロードされるたびに遅くてひどい感じがするため、最も好ましくありません。2 番目のオプションは、私のネイティブ アクティビティの動作です (最初にキャッシュを表示し、バックグラウンドで更新します。ただし、その間にユーザーが下にスクロールした場合、これによりユーザーがリストの一番上にジャンプします)。最初は絶対に完璧です!
これが私が現在使用しているコードです。
WebView wv = (WebView) v.findViewById(ref_id);
wv.getSettings().setJavaScriptEnabled(true);
wv.getSettings().setDatabaseEnabled(true);
String appDBPath = v.getContext().getApplicationContext().getDatabasePath("AppConstructor").getAbsolutePath();
wv.setWebChromeClient(new WebChromeClient() {
@Override
public void onReachedMaxAppCacheSize(long spaceNeeded,
long totalUsedQuota, WebStorage.QuotaUpdater quotaUpdater) {
quotaUpdater.updateQuota(spaceNeeded * 2);
}
@Override
public void onExceededDatabaseQuota(String url,
String databaseIdentifier, long currentQuota,
long estimatedSize, long totalUsedQuota,
WebStorage.QuotaUpdater quotaUpdater) {
quotaUpdater.updateQuota(estimatedSize * 2);
}
});
wv.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
wv.getSettings().setDomStorageEnabled(true);
wv.getSettings().setAppCacheMaxSize(1024 * 1024 * 8);
String appCachePath = v.getContext().getApplicationContext().getCacheDir().getAbsolutePath();
wv.getSettings().setAppCachePath(appCachePath);
wv.getSettings().setAllowFileAccess(true);
wv.getSettings().setAppCacheEnabled(true);
wv.loadUrl(ref_arg1);
Core x = new Core();
wv.addJavascriptInterface(x.new JavaScriptInterface(v.getContext()),"Android");
どんな助けでも大歓迎です!