android WebView緩存機制介紹

當咱們加載Html時候,會在咱們data/應用package下生成database與cache兩個文件夾:web

咱們請求的Url記錄是保存在webviewCache.db裏,而url的內容是保存在webviewCache文件夾下.
緩存


WebView中存在着兩種緩存:網頁數據緩存(存儲打開過的頁面及資源)、H5緩存(即AppCache)。

1、網頁緩存

一、緩存構成

/data/data/package_name/cache/
/data/data/package_name/database/webview.db
/data/data/package_name/database/webviewCache.db


網絡

二、緩存模式(5種)app

LOAD_CACHE_ONLY:  不使用網絡,只讀取本地緩存數據
ui

LOAD_DEFAULT:  根據cache-control決定是否從網絡上取數據。
url

LOAD_CACHE_NORMAL: API level 17中已經廢棄, 從API level 11開始做用同LOAD_DEFAULT模式spa

LOAD_NO_CACHE: 不使用緩存,只從網絡獲取數據.
webview

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。require



三、清除緩存

clearCache(boolean)
CacheManager.clear高版本中須要調用 隱藏API


四、控制大小

無系統API支持。
可選方式:定時統計緩存大小、按時間順序刪除緩存。


2、H5緩存


一、緩存構成

根據 setAppCachePath(String appCachePath) 提供的路徑,在H5使用緩存過程當中生成的緩存文件。


二、緩存模式

無模式選擇,經過 setAppCacheEnabled(boolean flag) 設置是否打開。默認關閉,即,H5的緩存沒法使用。


三、清除緩存

找到調用 setAppCachePath(String appCachePath) 設置緩存的路徑,把它下面的文件所有刪除就OK了。


四、控制大小

經過 setAppCacheMaxSize(long appCacheMaxSize) 設置緩存最大容量,默認爲Max Integer。
同時,可能經過覆蓋 WebChromeClient.onReachedMaxAppCacheSize(long requiredStorage, long quota, WebStorage.QuotaUpdater quotaUpdater) 來設置緩存超過先前設置的最大容量時的策略。


這裏又不得不拿IOS作一些比較:IOS中的webview的緩存機制能夠拿到瀏覽過的網頁的二進制流,這樣下次就直接能夠把流拿去顯示

相關文章
相關標籤/搜索