android 讀取WebView緩衝及清理WebView緩衝

來源:互聯網
上載者:User

標籤:

WebView中存在著兩種緩衝:網頁資料緩衝(儲存開啟過的頁面及資源)、H5緩衝(即appcache)。

一、網頁緩衝
1、緩衝構成
/data/data/package_name/cache/
/data/data/package_name/database/webview.db
/data/data/package_name/database/webviewCache.db

在項目中經常會使用到WebView控制項,當載入html頁面時,會在/data/data/應用package目錄下產生database與cache兩個檔案夾如如示:


請求的url記錄是儲存在webviewCache.db,而url的內容是儲存在webviewCache檔案夾下.

所以清理的時候只需要把這幾個檔案夾下的檔案刪除就行了

//真機測試我用的是魅藍5.1的系統,/data/data/應用package目錄下找不到database檔案用下面兩句清理webview網頁緩衝的時候.但是每次執行都報false,

context.deleteDatabase("webview.db");    
 context.deleteDatabase("webviewCache.db");

2、緩衝模式(5種)

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模式下,無論是否有網路,只要本地有緩衝,都使用緩衝。本地沒有緩衝時才從網路上擷取。
www.360.com.cn的cache-control為max-age=60,在兩種模式下都使用本機快取資料。

總結:根據以上兩種模式,建議緩衝策略為,判斷是否有網路,有的話,使用LOAD_DEFAULT,無網路時,使用LOAD_CACHE_ELSE_NETWORK。


而databases中的webviewCache.db 中放的就是圖片地址和圖片名字對應等資訊 的表~ 匯出後也可用SQLite Database Browser 等工具查看

 

1.優先緩衝 

好了,這裡你是不是想問:既然這些圖片已經存在手機緩衝裡面了,為什麼Webview不能再把它顯示出來呢?

這裡我們需要設定下:

WebSettings webSettings= webView.getSettings();

webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);

//WebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); 預設不使用緩衝!

LOAD_CACHE_ELSE_NETWORK的意思是:

 

Use cache if content is there, even if expired (eg, history nav) If it is not in the cache, load from network. Use withsetCacheMode(int).

如果內容已經存在cache 則使用cache,即使是過去的記錄。如果cache中不存在,從網路中擷取!

 

所以加上這句,不僅可以使用cache離線顯示使用者瀏覽過的內容,還可以在有網路的情況下優先調用緩衝,為使用者減少流量!~


2.緩衝管理:

(1)clearCacheFolder(Activity.getCacheDir(), System.currentTimeMillis());//刪除此時之前的緩衝.

 

在退出程式之前執行下面的代碼:

File file = CacheManager.getCacheFileBaseDir();      if (file != null && file.exists() && file.isDirectory()) { for (File item : file.listFiles()) { item.delete();      }      file.delete();      }      context.deleteDatabase("webview.db");      context.deleteDatabase("webviewCache.db");


更多執行個體請參考:http://www.android100.org/html/201409/07/63446.html

二、H5緩衝

這個我還沒有涉獵請參考:http://87426628.blog.163.com/blog/static/6069361820139183417725/

參考:

http://androiddada.iteye.com/blog/1280946

如果離線載入出現亂碼 可參考: http://androidturing.iteye.com/blog/1280656

 

http://androiddada.iteye.com/

2.緩衝管理:

(1)clearCacheFolder(Activity.getCacheDir(), System.currentTimeMillis());//刪除此時之前的緩衝.

 

android 讀取WebView緩衝及清理WebView緩衝

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.