[英]How to refresh a webview's cache?
我正在構建一個本機應用程序,其中(至少)一部分是Web應用程序,偽裝成本機應用程序。 在Facebook向我們展示了使用良好緩存的重要性的地方,我正在緩存網頁,因此當您第二次加載它時,它就像是應用程序的本機部分。 但是,按照我的設置方式,緩存的內容是永久的。 因此,如果我更改服務器上的某些內容,則仍會顯示舊的緩存內容。
這是我希望按優先順序實現的目標,最可取的是1。
最后一個選項是最不優選的,因為每次頁面重新加載時,它都感覺很慢而且很恐怖。 第二個選項是我的本機活動的行為方式(首先顯示緩存,在后台刷新。但是,如果用戶同時向下滾動,這會將用戶跳到列表的頂部)。 首先絕對是完美的!
這是我當前正在使用的代碼。
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");
任何幫助將不勝感激!
好吧,在尋找年齡並甚至在StackOverflow上獲得了風滾草的成就之后,這就是我設法得到情況1的方法。
WebView
加載緩存后,將啟動一個新的ASyncTask
。 此ASyncTask在URL后面附加了一些內容,這是我自己的自定義last-update變量。 當然,您可以將其替換為HTTP Header Last-Update
,但這對我不起作用。 如果結果變量與緩存的變量(我已存儲在SharedPreferences
)不同,則ASyncTask使用以下代碼強制刷新WebView的緩存。
_wv.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
_wv.reload();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.