Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android 讀取WebView緩存及清理WebView緩存

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

編輯:關於Android編程

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");

 

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved