android webview 緩存
來(lái)源:程序員人生 發(fā)布時(shí)間:2015-03-05 07:54:58 閱讀次數(shù):6235次
WebView的緩存可以分為頁(yè)面緩存和數(shù)據(jù)緩存。
頁(yè)面緩存是指加載1個(gè)網(wǎng)頁(yè)時(shí)的html、JS、CSS等頁(yè)面或資源數(shù)據(jù)。這些緩存資源是由于閱讀器的行動(dòng)而產(chǎn)生,開發(fā)者只能通過(guò)配置HTTP響應(yīng)頭影響閱讀器的行動(dòng)才能間接地影響到這些緩存數(shù)據(jù)。
那末相干的緩存到的地址目錄是:

要求的Url記錄是保存在webviewCache.db里,而url的內(nèi)容是保存在webviewCache文件夾下.
緩存構(gòu)成
/data/data/package_name/cache/
/data/data/package_name/database/webview.db
/data/data/package_name/database/webviewCache.db
緩存模式(5種)
LOAD_CACHE_ONLY: 不使用網(wǎng)絡(luò),只讀取本地緩存數(shù)據(jù)
LOAD_DEFAULT: 根據(jù)cache-control決定是不是從網(wǎng)絡(luò)上取數(shù)據(jù)。
LOAD_CACHE_NORMAL: API level 17中已廢棄, 從API level 11開始作用同LOAD_DEFAULT模式
LOAD_NO_CACHE: 不使用緩存,只從網(wǎng)絡(luò)獲得數(shù)據(jù).
LOAD_CACHE_ELSE_NETWORK,只要本地有,不管是不是過(guò)期,或no-cache,都使用緩存中的數(shù)據(jù)。
如:www.taobao.com的cache-control為no-cache,在模式LOAD_DEFAULT下,不管如何都會(huì)從網(wǎng)絡(luò)上取數(shù)據(jù),如果沒(méi)有網(wǎng)絡(luò),就會(huì)出現(xiàn)毛病頁(yè)面;在LOAD_CACHE_ELSE_NETWORK模式下,不管是不是有網(wǎng)絡(luò),只要本地有緩存,都使用緩存。本地沒(méi)有緩存時(shí)才從網(wǎng)絡(luò)上獲得。
www.360.com.cn的cache-control為max-age=60,在兩種模式下都使用本地緩存數(shù)據(jù)。
總結(jié):根據(jù)以上兩種模式,建議緩存策略為,判斷是不是有網(wǎng)絡(luò),有的話,使用LOAD_DEFAULT,無(wú)網(wǎng)絡(luò)時(shí),使用LOAD_CACHE_ELSE_NETWORK。
WebSettings webSettings = tqWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setDomStorageEnabled(true);
webSettings.setDatabaseEnabled(true);
webSettings.setAppCacheEnabled(true);
webSettings.setRenderPriority(RenderPriority.HIGH); //提高渲染的優(yōu)先級(jí)
lng = String.valueOf(VehicleApp.getInstance().getVehicleLng());
lat = String.valueOf(VehicleApp.getInstance().getVehicleLat());
if(CommonUtils.hasNetwork(getActivity())){
webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);
Preference.putString("cacheLat",lat);
Preference.putString("cacheLng",lng);
}else{
webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
lat=Preference.getString("cacheLat");
lng=Preference.getString("cacheLng");
}
tqWebView.loadUrl("http://xxxxxx.html?longitude=" + lng + "&latitude=" + lat);
tqWebView.getSettings().setLoadsImagesAutomatically(true);
tqWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// 返回值是true的時(shí)候控制去WebView打開,為false調(diào)用系統(tǒng)閱讀器或第3方閱讀器
view.loadUrl(url);
return true;
}
});
tqWebView.addJavascriptInterface(this, "demo");
tqWebView.setWebChromeClient(new WebChromeClient());
生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)