Ⅰ android開發,用webview打開本地html網頁時,怎麼清除緩存
android開發,用webview打開本地html網頁時,清除緩存的方法
在oncreate 加上 CookieSyncManager.createInstance(this); CookieSyncManager.getInstance().startSync(); CookieManager.getInstance().removeSessionCookie();
Ⅱ 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緩存
一、清除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();
}
Ⅳ WebView自動緩存-清除緩存
iOS的Webview載入HTML時會自動緩存JS、CSS等文件,當下次載入HTML時會根據請求的緩存策略是否使用緩存本地的JS和CSS,如果本地有緩存,那麼直接返回本地資源(判斷是否過期);如果沒有本地緩存則向伺服器請求地址。
1、NSURLRequestCachePolicy 指定緩存邏輯。URL載入系統提供了一個磁碟和內存混合的緩存,來響應網路請求。
2、 = 0 默認緩存策略
3、 不使用本地緩存數據
4、 直接載入源數據
5、 指定已存的緩存數據應該用來響應請求,不管它的生命時長和過期時間。
6、 指定已存的緩存數據用來滿足請求,不管生命時長和過期時間。
也可以使用這個方法清除單個請求的緩存
之前遇到一種情況,app端載入伺服器一個網頁,js調用http介面沒有傳參數報錯了,服務端更新之後安卓重新載入沒有問題,iOS端一直載入都會報錯,卸載重裝之後就沒問題了。
最後發現在沙盒的Caches目錄中找到一個WebKit的文件夾,把這個文件夾刪了也沒問題
借鑒:
html開發變態的靜態資源緩存與更新
iOS開發:解決UIWebView自動緩存導致頁面不可刷新問題
iOS html5使用緩存並及時更新方案總結
Ⅳ 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清除緩存
刪這文件好像是需要Root許可權的;
想清楚緩存試試下面的方法
private void removeCookie() {
CookieSyncManager.createInstance(this);
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.removeAllCookie();
CookieManager.getInstance().removeSessionCookie();
CookieSyncManager.getInstance().sync();
CookieSyncManager.getInstance().startSync();
}
Ⅶ 安卓微信內置瀏覽器清緩存方法
最近在測試公司內部的一個nginx登錄跳轉頁面,需要測試手機瀏覽器的兼容性,其中一個瀏覽器是不能繞過的,就是微信內置的瀏覽器。
微信內置瀏覽器跟其他瀏覽器比較不同的就是沒辦法方便的清除內存,我用的還是自己的微信賬號,我總不能說到設置里用「清除微信存儲空間」連著我自己珍藏了幾個G的聊天記錄一起消滅吧。
經過各種查,整合了一個比較方便的清除方法,話不多說上圖文~
1.在微信上發送 debugstbs.qq.com
給自己,訪問之
是不是很簡單呢~
另附上參考解決鏈接
強改微信內置瀏覽器——讓x5內核滾粗
IOS微信內置瀏覽器(WKWebView)
Ⅷ Android開發之WebView(一)配置&小技巧
背景:原生時間緊沒時間開發任務量大的任務,而前端又閑著打醬油
方案:原生+webview混合開發
缺點:對於比較復雜的頁面,webview在性能上力不從心;且與原生通信頻繁也增加了隱藏的工作量
優點:能自帶支持動態更新(js),能充分利用人力
webview是一個基於webkit引擎,展示web頁面的控制項。Android上的webview在低版本和高版本採用了不同的webkit版本內核,Android4.4(19)後直接使用了Chrome內核;WebView控制項功能強大,除了具有一般View的屬性和設置外,還可以對url請求,頁面載入,渲染,頁面交互進行強大的處理。一般來說webview可單獨使用,也可聯合其工具類一起使用
移動應用的主體是webview,主要以網頁語言編寫,穿插Native功能的Hybrid App開發類型。激活webview為活躍狀態,能正常執行網頁的響應;當webview 的頁面被失去焦點切換到後台不可見狀態onPause時,需要通知自己暫停所有的動作,比如DOM的解析,plugin的執行,JavaScript的執行等
1,顯示和渲染web頁面
2,直接使用本地assets或者網路上的html文件作為布局
3,可和JavaScript進行互相調用
1,直接在布局文件里寫死
2,動態添加進viewgroup中
註:不管以哪種方式,都必須注意webview的銷毀,否則可能會造成內存泄漏最終導致內存溢出crash
下面是WebView的一些常用的方法列舉,一些已經過時的方法未列出
下面是WebSettings的一些常用的方法列舉,一些已經過時的方法就沒有寫出來了
一般不管是動態生成還是xml寫死,只要處理好了引用持有問題,就能有效的避免內存泄漏;下面是我嘗試的方案,在工具類WebViewUtils.java里封裝好,在activity銷毀的時候調用
1,清除webview緩存和記錄
2,可以設置不啟用緩存
3,H5的一些控制項標簽不支持導致的白屏
4,xml啟用軟體加速
5,通過menifest的來配置,在目標webview的activity設置
解決方案:
解決方案:
解決方案:
上一篇: Flutter入門-01-工程創建&目錄介紹