安卓开发清除缓存 webview为什么自动缓存

下次自动登录
现在的位置:
& 综合 & 正文
Android WebView的缓存机制
在应用中我们需要想要有个流量统计来告诉客户---我们的产品耗了你们多少流量(主要给客户一个放心-透明的才是值得信赖的)。
在android2.2以上系统中可以通过框架给我们提供的TrafficStats来完成这项工作。现在最大的问题是不能兼容2.2以下的系统。所以我们在http连接地方进行流量累计统计。结果发现流量总是会少一大截(我们不能忽悠客户是不是),后来发现是webview在搞鬼。我们从服务端得到的数据有的是通过webview来展示,那么webview本身会通过里面的连接来获取图片的数据。这些数据我们就监控不到了。
还好android系统会加载html文件的时候,会在我们的data/package下生成database和cache两个文件夹来缓存相关信息,我们可以试着从这些文件文件来获取相对准确的流量数据。
我们请求的URL记录保留在webviewCache.db里,而url的内容保存在webviewCache文件夹下
里面的url就是我前面去远程获取图片的url地址。
这里有一个具体的实例。有兴趣可以去查看下~~
&&&&推荐文章:
【上篇】【下篇】android&WebView中的误区
在android web开发的时候,WebView是必不可少的控件,但是你知道它的接口都是什么意思吗?
先说一下遇到的误区吧
1.shouldOverrideUrlLoading 重新加载url误区
这个方法是WebClient接口的一个回调方法,主要作用是防止重定向链接跳出webview。但是有的文章会这样写:
public boolean shouldOverrideUrlLoading(WebView view, String url)
{&&&&&&&&&&&
view.loadUrl(url);
&&& return
当初也搞不懂为什么要家一句:view.loadUrl(url);,但是后来发现,这样的话重定向的链接会多发一次,严重影响效率,后来把这句删掉,webview也能够正常的前进后退了。
//WebView常用的方法,参考:/zgz345/p/3768174.html
2. 通过java代码调用javascript
WebSettings webSettings =
mWebView .getSettings();
webSettings.setJavaScriptEnabled(true);
mWebView.addJavascriptInterface(new Object() {
public void clickOnAndroid() {
mHandler.post(new Runnable() {
public void run() {
webview.loadUrl("javascript:wave()");
}, "demo");
3. 按返回键时, 不退出程序而是返回上一浏览页面:
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) &&
mWebView .canGoBack()) {
webview.goBack();
return true;
return super.onKeyDown(keyCode, event);
4. 打开页面时, 自适应屏幕:
WebSettings webSettings =
mWebView .getSettings();
webSettings.setUseWideViewPort(true);//设置此属性,可任意比例缩放
webSettings.setLoadWithOverviewMode(true);
5. 便页面支持缩放:
WebSettings webSettings =
mWebView .getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setBuiltInZoomControls(true);
webSettings.setSupportZoom(true);
6.如果webView中需要用户手动输入用户名、密码或其他,则webview必须设置支持获取手势焦点。
webview.requestFocusFromTouch();
加载界面主要调用三个方法:LoadUrl、LoadData、LoadDataWithBaseURL.&
1、LoadUrl&&&&&&&&&&&&直接加载网页、图片并显示.(本地或是网络上的网页、图片、gif)&&
2、LoadData&&&&&&&&&&&显示文字与图片内容&(模拟器1.5、1.6)&&
3、LoadDataWithBase&&显示文字与图片内容(支持多个模拟器版本)&
8.WebSettings 的常用方法介绍
setJavaScriptEnabled(true);&&//支持js
setPluginsEnabled(true);&&//支持插件&
setUseWideViewPort(false);&&//将图片调整到适合webview的大小&
setSupportZoom(true);&&//支持缩放&
setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);&//支持内容重新布局&&
supportMultipleWindows();&&//多窗口&
setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);&&//关闭webview中缓存&
setAllowFileAccess(true);&&//设置可以访问文件&
setNeedInitialFocus(true);&//当webview调用requestFocus时为webview设置节点
webview&webSettings.setBuiltInZoomControls(true);&//设置支持缩放&
setJavaScriptCanOpenWindowsAutomatically(true);&//支持通过JS打开新窗口&
setLoadWithOverviewMode(true); // 缩放至屏幕的大小
setLoadsImagesAutomatically(true);&&//支持自动加载图片
9.WebViewClient 的方法全解
doUpdateVisitedHistory(WebView&view,&String&url,&boolean&isReload)&&//(更新历史记录)&
onFormResubmission(WebView&view,&Message&dontResend,&Message&resend)&//(应用程序重新请求网页数据)&
onLoadResource(WebView&view,&String&url)&//&在加载页面资源时会调用,每一个资源(比如图片)的加载都会调用一次。&
onPageStarted(WebView&view,&String&url,&Bitmap&favicon)&//这个事件就是开始载入页面调用的,通常我们可以在这设定一个loading的页面,告诉用户程序在等待网络响应。&
onPageFinished(WebView&view,&String&url)&//在页面加载结束时调用。同样道理,我们知道一个页面载入完成,于是我们可以关闭loading&条,切换程序动作。&
onReceivedError(WebView&view,&int&errorCode,&String&description,&String&failingUrl)//&(报告错误信息)&
onReceivedHttpAuthRequest(WebView&view,&HttpAuthHandler&handler,&String&host,String&realm)//(获取返回信息授权请求)&
onReceivedSslError(WebView&view,&SslErrorHandler&handler,&SslError&error)&//重写此方法可以让webview处理https请求。
onScaleChanged(WebView&view,&float&oldScale,&float&newScale)&//&(WebView发生改变时调用)&
onUnhandledKeyEvent(WebView&view,&KeyEvent&event)&//(Key事件未被加载时调用)&
shouldOverrideKeyEvent(WebView&view,&KeyEvent&event)//重写此方法才能够处理在浏览器中的按键事件。&
shouldOverrideUrlLoading(WebView&view,&String&url)&
//在点击请求的是链接是才会调用,重写此方法返回true表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边。这个函数我们可以做很多操作,比如我们读取到某些特殊的URL,于是就可以不打开地址,取消这个操作,进行预先定义的其他操作,这对一个程序是非常必要的。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。Android实现WebView删除缓存的方法
作者:无鸯
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了Android实现WebView删除缓存的方法,实例分析了Android针对WebView操作缓存的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
本文实例讲述了Android实现WebView删除缓存的方法。分享给大家供大家参考。具体如下:
删除保存于手机上的缓存:
// clear the cache before time numDays
private int clearCacheFolder(File dir, long numDays) {
int deletedFiles = 0;
if (dir!= null && dir.isDirectory()) {
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 deletedF
打开关闭使用缓存:
//优先使用缓存:
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");
希望本文所述对大家的Android程序设计有所帮助。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具114网址导航

我要回帖

更多关于 安卓开发webview 的文章

 

随机推荐