當前位置:首頁 » 安卓系統 » androidwebview緩存

androidwebview緩存

發布時間: 2025-05-25 01:13:57

㈠ android webview載入url怎麼緩存

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

我們請求的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



綜合可以得知 webview 會將我們瀏覽過的網頁url已經網頁文件(css、圖片、js等)保存到資料庫表中


緩存模式(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。

java">設置WebView緩存模式

privatevoidinitWebView(){

mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.getSettings().setRenderPriority(RenderPriority.HIGH);
mWebView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);//設置緩存模式
//開啟DOMstorageAPI功能
mWebView.getSettings().setDomStorageEnabled(true);
//開啟databasestorageAPI功能
mWebView.getSettings().setDatabaseEnabled(true);
StringcacheDirPath=getFilesDir().getAbsolutePath()+APP_CACAHE_DIRNAME;
//StringcacheDirPath=getCacheDir().getAbsolutePath()+Constant.APP_DB_DIRNAME;
Log.i(TAG,"cacheDirPath="+cacheDirPath);
//設置資料庫緩存路徑
mWebView.getSettings().setDatabasePath(cacheDirPath);
//設置ApplicationCaches緩存目錄
mWebView.getSettings().setAppCachePath(cacheDirPath);
//開啟ApplicationCaches功能
mWebView.getSettings().setAppCacheEnabled(true);
}
清除緩存

/**
*清除WebView緩存
*/
publicvoidclearWebViewCache(){

//清理Webview緩存資料庫
try{
deleteDatabase("webview.db");
deleteDatabase("webviewCache.db");
}catch(Exceptione){
e.printStackTrace();
}

//WebView緩存文件
FileappCacheDir=newFile(getFilesDir().getAbsolutePath()+APP_CACAHE_DIRNAME);
Log.e(TAG,"appCacheDirpath="+appCacheDir.getAbsolutePath());

FilewebviewCacheDir=newFile(getCacheDir().getAbsolutePath()+"/webviewCache");
Log.e(TAG,"webviewCacheDirpath="+webviewCacheDir.getAbsolutePath());

//刪除webview緩存目錄
if(webviewCacheDir.exists()){
deleteFile(webviewCacheDir);
}
//刪除webview緩存緩存目錄
if(appCacheDir.exists()){
deleteFile(appCacheDir);
}
}

㈡ android開發,用webview打開本地html網頁時,怎麼清除緩存

/**
* 清除WebView緩存

*/
public void clearWebViewCache() {

/**清理Webview緩存資料庫,緩存文件由程序自動生成

* /data/data/package_name/database/webview.db

* /data/data/package_name/database/webviewCache.db

**/
try {
//因為他們都是文件,所以可以用io方式刪除,具體方法可以自己寫
deleteDatabase("webview.db");
deleteDatabase("webviewCache.db");

} catch (Exception e) {

e.printStackTrace();
}

//WebView 緩存文件
File webviewCacheDir = new File(APP_CACAHE_DIRNAME);

//刪除webview 緩存目錄

if (webviewCacheDir.exists()) {

//具體的方法自己寫

deleteFile(webviewCacheDir);
}
}

㈢ Android:最全面的 Webview 詳解

WebView是一個基於webkit引擎、展現web頁面的控制項。

一般來說Webview可單獨使用,可聯合其子類一起使用,所以接下來,我會介紹:

常見用法:Back鍵控制網頁後退

配置步驟1:添加訪問網路許可權 (AndroidManifest.xml)

配置步驟2:生成一個WebView組件(有兩種方式)

配置步驟3:進行配置-利用WebSettings子類 (常見方法)

常見用法:設置WebView緩存

注意: 每個 Application 只調用一次 WebSettings.setAppCachePath(),WebSettings.setAppCacheMaxSize()

常見方法1:shouldOverrideUrlLoading()

常見方法2:onPageStarted()

常見方法3:onPageFinished()

常見方法4:onLoadResource()

常見方法5:onReceivedError()

常見方法6:onReceivedSslError()

常見方法1: onProgressChanged()

常見方法2: onReceivedTitle()

具體請看我寫的文章 Android WebView與JS的交互方式 最全面匯總

3.4.1 不在xml中定義 Webview ,而是在需要的時候在Activity中創建,並且Context使用 getApplicationgContext()

3.4.2 在 Activity 銷毀( WebView )的時候,先讓 WebView 載入null內容,然後移除 WebView,再銷毀 WebView,最後置空。

步驟1:添加訪問網路許可權

AndroidManifest.xml

步驟2:主布局
activity_main.xml

步驟3:根據需要實現的功能從而使用相應的子類及其方法(注釋很清楚了)
MainActivity.java

㈣ Android 下的 WebView 中數據如何保存

1、Android中的WebView控制項當載入html時候,會在data/應用package下生成database與cache兩個文件夾如下圖如示:

Url記錄是保存在webviewCache.db里,而url的內容是保存在webviewCache文件夾下。
WebView中存在著兩種緩存:網頁數據緩存(存儲打開過的頁面及資源)、H5緩存(即AppCache)。



2、緩存構成
/data/data/package_name/cache/
/data/data/package_name/database/webview.db

/data/data/package_name/database/webviewCache.db

webview 會將瀏覽過的網頁url以及網頁文件(css、圖片、js等)保存到資料庫表中。


緩存模式(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,都使用緩存中的數據。

㈤ android 怎麼清理 XWalkView 緩存的LocalStorage

WebView的緩存可以分為頁面緩存和數據緩存:
1,頁面緩存: >指載入一個網頁時的html、JS、CSS等頁面或者資源數據。 >這些緩存資源是由於瀏覽器的行為而產生,開發者只能通過配置HTTP響應頭影響瀏覽器的行為才能間接地影響到這些緩存數據。 >緩存的索引存放在/data/data/package_name/databases下。 >文件存放在/data/data/package_name/cache/xxxwebviewcachexxx下。
2,數據緩存 : >數據緩存分為AppCache和DOM Storage兩種。 >這些緩存資源是由開發者的直接行為而產生,所有的緩存數據都由開發者直接完全地掌控。 >Android中Webkit使用一個db文件來保存AppCache數據(my_path/ApplicationCache.db) >Android中Webkit會為DOM Storage產生兩個文件(my_path/localstorage/http_h5.m.taobao.com_0.localstorage和my_path/localstorage/Databases.db)。
那既然了解了,怎麼清除呢:
以下是網路出來的答案:
1.webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); 2.context.deleteDatabase(「WebView.db」); 3.context.deleteDatabase(「WebViewCache.db」);4.webView.clearCache(true); 6.webView.clearFormData(); 7.getCacheDir().delete(); 8.用File的delete方法刪除緩存文件夾;12345

老實說,對我的問題,沒多大用,還是那句話,有事請Google
其實如果你只是想要每次用webView.loadUrl(url)載入新的頁面顯示,那麼調用webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE)就可以實現了,並不需要去刪除緩存文件什麼的。
但是我的項目中使用了JavaScript的交互,而JavaScript的載入是通過頭文件去獲取載入的,所以每次我去獲取新的頁面的時候,雖然頁面是新的,但是頭文件中的數據還是old的,所以每次載入到的js都是old的。那麼如何去做呢?
上面提到這個頭文件是瀏覽器HTTP相應頭去獲取的,開發者只能間接的影響,並不能控制。
所以單獨的webView.clearCache(true)是不能成功的,還需要清除webView的Cookie才行。
所以我最終的解決方法是在Activity的onDestroy()方法中添加如下代碼:
@Overrideprotected void onDestroy() { super.onDestroy(); //清空所有Cookie
CookieSyncManager.createInstance(QzmobileApp.getContext()); //Create a singleton CookieSyncManager within a context
CookieManager cookieManager = CookieManager.getInstance(); // the singleton CookieManager instance
cookieManager.removeAllCookie();// Removes all cookies.
CookieSyncManager.getInstance().sync(); // forces sync manager to sync now

webView.setWebChromeClient(null);
webView.setWebViewClient(null);
webView.getSettings().setJavaScriptEnabled(false);
webView.clearCache(true);
}

㈥ 如何讀寫Android的WebView緩存文件

簡單步驟解答:

  1. 新建一個Android工程命名為WebViewCache。

  2. 在assets目錄下新建一個html文件,命名為index.html。

  3. 修改主核心程序WebViewCacheDemo.java,這里我只載入了index.html文件。

  4. 在AndroidMainifest.xml文件中加訪問網路的許可權。

請求的url記錄是保存在webviewCache.db,而url的內容是保存在webviewCache文件夾下。

㈦ android中 如何清理webview緩存

一、清除cookie

public static void clearCookies(Context context) {
// Edge case: an illegal state exception is thrown if an instance of
// CookieSyncManager has not be created. CookieSyncManager is normally
// created by a WebKit view, but this might happen if you start the
// app, restore saved state, and click logout before running a UI
// dialog in a WebView -- in which case the app crashes
@SuppressWarnings("unused")
CookieSyncManager cookieSyncMngr =
CookieSyncManager.createInstance(context);
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.removeAllCookie();
}

這是facebook sdk的源碼,我不知道第一句到底起了什麼作用?

二、清除webview緩存,查看root過的手機data下的文件,會發現有這個東西:webview命名的東西

刪除保存於手機上的緩存.

// clear the cache before time numDays
private int clearCacheFolder(File dir, long numDays) {
int deletedFiles = 0;
if (dir!= null && dir.isDirectory()) {
try {
for (File child:dir.listFiles()) {
if (child.isDirectory()) {
deletedFiles += clearCacheFolder(child, numDays);
}
if (child.lastModified() < numDays) {
if (child.delete()) {
deletedFiles++;
}
}
}
} catch(Exception e) {
e.printStackTrace();
}
}
return deletedFiles;
}

打開關閉使用緩存
//優先使用緩存:
WebView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);

//不使用緩存:
WebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);

在退出應用的時候加上如下代碼
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");

發現這個問題,一個朋友在iteye上問的:

Android的CookieManager只提供了removeAllCookies方法,用來刪除所有的cookie,有什麼辦法只刪除和特定url關聯的cookie呢?本來打算使用setCookie(url, value)將指定url關聯的cookie設為空串,但試了一下發現這個方法只是在已有的基礎上繼續添加cookie,並不能重置已有的cookie。

有朋友給打答案:

/**
* 同步一下cookie
*/
public static void synCookies(Context context, String url) {
CookieSyncManager.createInstance(context);
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
cookieManager.removeSessionCookie();//移除
cookieManager.setCookie(url, cookies);//指定要修改的cookies
CookieSyncManager.getInstance().sync();
}

熱點內容
怎麼用香港伺服器上外網 發布:2025-05-25 06:58:14 瀏覽:243
用哪個軟體配置交換機 發布:2025-05-25 06:56:54 瀏覽:62
帶秘境腳本 發布:2025-05-25 06:52:27 瀏覽:959
扁平化源碼 發布:2025-05-25 06:48:52 瀏覽:760
qq教程網站源碼 發布:2025-05-25 06:48:48 瀏覽:232
判斷資料庫是否連接成功 發布:2025-05-25 06:24:36 瀏覽:277
java本地存儲 發布:2025-05-25 06:07:03 瀏覽:137
小學生學編程入門書 發布:2025-05-25 05:53:49 瀏覽:670
時間和密碼是什麼意思 發布:2025-05-25 05:50:53 瀏覽:661
阿狸雲配置伺服器 發布:2025-05-25 05:49:59 瀏覽:930