標籤:webview的緩衝機制
WebView的緩衝可以分為頁面緩衝和資料緩衝。
1. 頁面緩衝是指載入一個網頁時的html、JS、CSS等頁面或者資源資料。這些緩衝資源是由於瀏覽器的行為而產生,開發人員只能通過配置HTTP回應標頭影響瀏覽器的行為才能間接地影響到這些快取資料。
他們的索引存放在/data/data/package_name/databases下。他們的檔案存放在/data/data/package_name/cache/xxxwebviewcachexxx下。檔案夾的名字在2.x和4.x上有所不同,但都檔案夾名字中都包含webviewcache。
2. 資料緩衝分為兩種:AppCache和DOM Storage(Web Storage)。他們是因為頁面開發人員的直接行為而產生。所有的快取資料都由開發人員直接完全地掌控。
AppCache使我們能夠有選擇的緩衝web瀏覽器中所有的東西,從頁面、圖片到指令碼、css等等。尤其在涉及到應用於網站的多個頁面上的CSS和JavaScript檔案的時候非常有用。其大小目前通常是5M。
在Android上需要手動開啟(setAppCacheEnabled),並設定路徑(setAppCachePath)和容量(setAppCacheMaxSize)
Android中Webkit使用一個db檔案來儲存AppCache資料(my_path/ApplicationCache.db)
如果需要儲存一些簡單的用key/value對即可解決的資料,DOM Storage是非常完美的方案。根據作用範圍的不同,有Session Storage和Local Storage兩種,分別用於會話層級的儲存(頁面關閉即消失)和本地化儲存(除非主動刪除,否則資料永遠不會到期)。
在Android中可以手動開啟DOM Storage(setDomStorageEnabled),設定儲存路徑(setDatabasePath)
Android中Webkit會為DOM Storage產生兩個檔案(my_path/localstorage/http_h5.m.taobao.com_0.localstorage和my_path/localstorage/Databases.db)
在Android中清除緩衝時,如果需要清除Local Storage的話,僅僅刪除Local Storage的本機存放區檔案是不夠的,記憶體裡面有快取資料。如果再次進入頁面,Local Storage中的快取資料同樣存在。需要殺死程式啟動並執行當前進程再重新啟動才可以。
- WebSettings webseting = m_webview .getSettings();
- webseting.setDomStorageEnabled(true);
- webseting.setAppCacheMaxSize(1024*1024*8);//設定緩衝大小,我設的是8M
- String appCacheDir = this.getApplicationContext().getDir("cache", Context.MODE_PRIVATE).getPath();
- webseting.setAppCachePath(appCacheDir);
- webseting.setAllowFileAccess(true);
- webseting.setAppCacheEnabled(true);
- webseting.setCacheMode(WebSettings.LOAD_DEFAULT);
webview可以設定一個WebChromeClient對象,在其onReachedMaxAppCacheSize函數對擴充緩衝做出響應。
王立平--WebView的緩衝機制