簡體   English   中英

如何刷新網頁視圖的緩存?

[英]How to refresh a webview's cache?

我正在構建一個本機應用程序,其中(至少)一部分是Web應用程序,偽裝成本機應用程序。 在Facebook向我們展示了使用良好緩存的重要性的地方,我正在緩存網頁,因此當您第二次加載它時,它就像是應用程序的本機部分。 但是,按照我的設置方式,緩存的內容是永久的。 因此,如果我更改服務器上的某些內容,則仍會顯示舊的緩存內容。

這是我希望按優先順序實現的目標,最可取的是1。

  1. 緩存內容首先顯示。 該頁面在后台檢查較新的版本,但僅在內容不同時才重新加載。
  2. 或緩存的內容首先顯示。 在后台頁面刷新並重新加載。
  3. 或X時間(一周?)后,緩存的內容將被擦除,從而迫使頁面重新加載。

最后一個選項是最不優選的,因為每次頁面重新加載時,它都感覺很慢而且很恐怖。 第二個選項是我的本機活動的行為方式(首先顯示緩存,在后台刷新。但是,如果用戶同時向下滾動,這會將用戶跳到列表的頂部)。 首先絕對是完美的!

這是我當前正在使用的代碼。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM