Android WebView的缓存

Posted jdsjlzx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android WebView的缓存相关的知识,希望对你有一定的参考价值。



各位读者大家好,最近比较忙好久没有写blog了,今天挤点时间和大家分享一下​​Android​​中WebView的缓存。我们在项目中也时常会用到 WebView这个控件,当我们加载html时候,会在我们data/应用package下生成database与cache两个文件夹如下图如示:

  我们请求的url记录是保存在webviewCache.db里,而url的内容是保存在webviewCache文件夹下.

  为了让大家更容易理解,我做一个简单的例子,我定义一个html文件,在里面加载了一个淘宝的衣服图片的url,用WebView加载出来,然后再试着从缓存里把这张图片读取出来。

  下面大家可以按照我的步骤一步一步来实践:

  第一步:新建一个android工程命名为WebViewCacheDemo.目录结构如下:

  第二步:在assets目录下新建一个html文件,命名为index.html,(这里加载了一个淘宝的图片):

  ​​http://img04.taobaocdn.com/imgextra/i4/608825099/T2nGXBXXpaXXXXXXXX_!!608825099.jpg_310x310.jpg​

  第三步:修改main.xml布局文件一个WebView控件一个Button(点击加载缓存图片用),代码如下:

 


XML/HTML代码
1. < ?xml version="1.0" encoding="utf-8"?>
2. < LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3. android:orientation="vertical"
4. android:layout_
5. android:layout_
6. >
7. < WebView
8. android:id="@+id/webview"
9. android:layout_
10. android:layout_
11. />
12. < Button
13. android:id="@+id/button"
14. android:layout_
15. android:layout_
16. android:text="从缓存里读取图片"
17. />
18. < /LinearLayout>

第四步:修改主核心程序WebViewCacheDemo.java,这里我只加载了index.html文件,按钮事件暂时没写,代码如下:

XML/HTML代码


1. package com.tutor.webviewcache;
2. import android.app.Activity;
3. import android.os.Bundle;
4. import android.view.View;
5. import android.view.View.OnClickListener;
6. import android.webkit.WebView;
7. import android.widget.Button;
8. public class WebViewCacheDemo extends Activity
9.
10. private WebView mWebView;
11. //private Button mButton;
12. url = "file:///android_asset/index.html";
13. @Override
14. public void onCreate(Bundle savedInstanceState)
15. super.onCreate(savedInstanceState);
16. setContentView(R.layout.main);
17.
18. mWebView
19. mWebView.loadUrl(url);
20.
21. mButton
22. // mButton.setOnClickListener(listener);
23.
24.

第五步:在AndroidMainifest.xml文件中加访问网络的权限:

XML/HTML代码

  1. < uses-permission android:name= "android.permission.INTERNET" />

 运行效果如下:

  此时我们在WebViewCache.db里的cache.table里多了一条记录如下图所示:

  在cache/webviewCache/目录下多了一个10d8d5cd文件,刚好和cache.table里的filepath,我们可以断定这个文件就是我们从网上拽下来的图片:

  为了验证猜想,我给Button增加事件响应,就是弹出Dialog,里面加载缓存的图片,完整代码如下:

Java代码
1. package
2. import
3. import
4. import
5. import
6. import
7. import
8. import
9. import
10. import
11. import
12. import
13. import
14. import
15. import
16. import
17. public class WebViewCacheDemo extends
18.
19. private
20. private
21. private static final String url = "file:///android_asset/index.html"
22. @Override
23. public void
24. super
25. setContentView(R.layout.main);
26.
27. mWebView = (WebView)findViewById(R.id.webview);
28. mWebView.loadUrl(url);
29.
30. mButton = (Button)findViewById(R.id.button);
31. mButton.setOnClickListener(listener);
32.
33.
34. //button点击事件
35. new
36. @Override
37. public void
38. new ImageButton(WebViewCacheDemo. this
39. mImageView.setImageBitmap(getPictureFromCache());
40. new Dialog(WebViewCacheDemo. this
41. "从缓存里读取图片"
42. d.setContentView(mImageView,
43. new
44. d.show();
45.
46.
47. ;
48. //从缓存里读取图片,实际实用中会比这个灵活多,我这里写死了
49. private
50. null
51. new File(getCacheDir()+ "/webviewCache/10d8d5cd"
52. try
53. new
54. bitmap = BitmapFactory.decodeStream(is);
55. catch
56. e.printStackTrace();
57.
58. return
59.
60.

以上是关于Android WebView的缓存的主要内容,如果未能解决你的问题,请参考以下文章

检查文件是不是已经存在于webview缓存android中

android Cache——webview的缓存处理

WebView 数据缓存 (Android)

Android WebView的缓存

为啥android Webview默认不检查缓存?

Android WebView 缓存处理