android开发中难免会使用一些网页来展示某些数据,然而有的网页内容可能是基本上不会变的,每次加载既耗资源又耗流量,假如网络不好用户体验还会很差,这个时候适当的用一些缓存就很有必要了,无论是android还是iOS的WebView都很好的实现了离线缓存的功能,我们要做的只是设置一下~

android  中WebView缓存需要手动打开,

String cacheDirPath = getFilesDir().getAbsolutePath() + APP_CACAHE_DIRNAME;WebSettings settings = webView.getSettings();
//设置数据库缓存路径 settings.setDatabasePath(cacheDirPath); //设置 App Caches 缓存目录a settings.setAppCachePath(cacheDirPath); //开启 App Caches 功能 settings.setAppCacheEnabled(true);

 这样就打开了缓存功能,接下来就是设置缓存模式了,android中共有五种缓存模式   

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模式下,无论是否有网络,只要本地有缓存,都使用缓存。本地没有缓存时才从网络上获取。

开发者可以根据自己app 的需要来设置不同的缓存模式,我的实现是如果网络是Wi-Fi,使用默认模式,如果是3g或没有网络则优先加载缓存

if (isWIFIkAvailable(WebViewLoadActivity.this)) {            //当前有可用网络            settings.setCacheMode(WebSettings.LOAD_DEFAULT);  //设置 缓存模式( 根据cache-control决定是否从网络上取数据。)        } else {            //当前没有可用网络            settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);  //设置 缓存模式(只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据。)        }
这样做的好处是既能保证加载速度又能节省流量,其实最开始想要实现的是如果要加载的网页资源在一定时间内没有变化就加载缓存的资源,如果有变化则加载网络上的资源,理想的状态是通过设置请求消息头if-Modified-Since来实现,不过没有成功,如果哪位看官了解,请在下边留下评论,万分感谢~

   
   

更多相关文章

  1. Android(安卓)TextView设置自动识别的超链接字体颜色,及自身点击
  2. Android(安卓)studio 分配内存设置方法
  3. Android常用Layout源码总结—FrameLayout
  4. android imageview显示不全或者gilde加载不全
  5. Android设置屏幕亮度的两种方式
  6. android绘图Paint.setXfermode()和Canvas.saveLayer()方法的作用
  7. AndroidUI设计之 布局管理器 - 详细解析布局实现
  8. Android利用Fiddler进行网络数据抓包
  9. Android(安卓)Studio的TextView实现滚动显示文字

随机推荐

  1. Android中去掉ActionBar的几种方法
  2. Android 设置系统闹铃和日历
  3. 关于使用Android Studio 2.1+ 出现AGPBI
  4. Android: 采用 startActivityForResult
  5. android自定义键盘与更改单个Keys的背景
  6. Android设备系统及屏幕分辨率统计信息汇
  7. Android学习之保存Bitmap到指定文件夹
  8. Flutter 混合开发 - 02 百度地图定位功能
  9. Android SharedPreferences轻量级的存储
  10. RecyclerView Android RecyclerView 使用