转载自: http://blog.csdn.net/kesenhoo/article/details/7395817

Redundant Downloads are Redundant[重复下载是冗余的]

  • 减少下载的最基本方法是仅仅下载那些你需要的[美国人的思维还是比较直接,虽然这句话看起来比较搞笑,但是很有道理]。从数据的角度看,我们可以通过传递类似上次更新时间这样的参数来制定查询某些数据。
  • 同样,在下载图片的时候,server那边最好能够减少图片的大小,而不是让我们下载完整大小的图片。

Cache Files Locally [缓存文件到本地]

  • 避免下载重复的数据是很重要的。可以使用缓存机制来处理这个问题。缓存static的资源,例如完整的图片。这些缓存的资源需要分开存放。
  • 为了保证app不会因为缓存而导致显示的是旧数据,请从缓存中获取最新的数据,当数据过期的时候,会提示进行刷新。
  1. long currentTime = System.currentTimeMillis());  HttpURLConnection conn = (HttpURLConnection) url.openConnection();  long expires = conn.getHeaderFieldDate("Expires", currentTime);
    long lastModified = conn.getHeaderFieldDate("Last-Modified", currentTime);  setDataExpirationDate(expires);  if (lastModified < lastUpdateTime) {  // Skip update
    } else {  // Parse update
    } 

  • 使用这种方法,可以有效保证缓存里面一直是最新的数据。
  • 可以使用下面的方法来获取外部缓存的目录:
Context.getExternalCacheDir();
  • 下面是获取内部缓存的方法,请注意,存放在内存中的数据有可能因内部空间不够而被清除。
Context.getCache();
  • 不管是存放在哪里的文件都会在app卸载的时候被清除。

Use the HttpURLConnection Response Cache[使用HttpURLConnection Response缓存]

  • Android 4.0里面为HttpURLConnection增加了一个response cache,我们可以使用反射机制开启HTTP response cache,看下面的例子:
  1. private void enableHttpResponseCache() {  try {  long httpCacheSize = 10 * 1024 * 1024; // 10 MiB  File httpCacheDir = new File(getCacheDir(), "http");  Class.forName("android.net.http.HttpResponseCache")  .getMethod("install", File.class, long.class)  .invoke(null, httpCacheDir, httpCacheSize);  } catch (Exception httpResponseCacheNotAvailable) {  Log.d(TAG, "HTTP response cache is unavailable.");  }
    }  

  • 上面的sample code会在Android 4.0以上的设备上开启response cache,同时不会影响到之前的程序。
  • 在cache被开启之后,所有cache中的HTTP请求都可以直接在本地存储中进行响应,并不需要开启一个新的网络连接。
  • 被cache起来的response可以被server所确保没有过期,这样就减少了带宽。没有被cached的response会因方便下次请求而被存储在response cache中。
 
后记:Cache机制在很多实际项目上都有使用到,实际操作会复杂许多,有机会希望能够分享一个Cache的实例。
 

学习自:http://developer.android.com/training/efficient-downloads/redundant_redundant.html,谢谢!

转载请注明出处:http://blog.csdn.net/kesenhoo,谢谢!

分类: Android Traffic
本文转自demoblog博客园博客,原文链接http://www.cnblogs.com/0616--ataozhijia/p/4324447.html如需转载请自行联系原作者
demoblog

[Android Traffic] 使用缓存来避免重复的下载相关推荐

  1. [Android Traffic] 根据网络类型更改下载模式

    转载自: http://blog.csdn.net/kesenhoo/article/details/7396321 Modifying your Download Patterns Based on ...

  2. android 应用专属目录,获取Android应用专属缓存存储目录的实例

    如果你想摆脱缓存目录使用的尴尬:找不到目录?忘记申请读写权限?害怕污染用户存储空间?--请往下看 SD卡缓存目录 当应用需要将图片或者文件缓存到SD卡中时要去申请创建目录,有下面几种途径 我们可以通过 ...

  3. Android 手机app缓存清理实现

    前言 说道Android app清理缓存,那就要先了解缓存在哪个地方,以及如何去获取到缓存路径,和清理这个路径中的缓存. 需要提前了解的知识 系统文件(注:这个是系统的文件系统,不允许修改的) 内置S ...

  4. android设置webview缓存目录,Android基础入门教程——7.5.5 WebView缓存问题

    Android基础入门教程--7.5.5 WebView缓存问题 Android基础入门教程 本节引言:现在很多门户类信息网站,比如虎嗅,ifanr,钛媒体等等的APP,简单点说是信息阅读类的APP, ...

  5. Android4清理代码缓存,Android清除应用缓存的两种方法

    第一种 使用ActivityManager中的clearApplicationUserData方法,代码如下: ActivityManager am = (ActivityManager) getSy ...

  6. Android清除WebView缓存

    1. 前言 用过WebView的同学都清楚,WebView默认是会自动缓存网页资源的.虽然前端H5网页有自己一套缓存机制(不懂的同学,可以看看这篇文章 手把手教你构建 Android WebView ...

  7. android内核网络缓存,Android WebView cache 缓存 腾讯X5内核在线视频播放

    [实例简介] Android WebView cache 缓存 腾讯X5内核在线视频播放 [实例截图] [核心代码] Terry007 └── Terry007 ├── AndroidManifest ...

  8. 反思 | Android 音视频缓存机制的系统性设计

    反思 系列博客是我的一种新学习方式的尝试,该系列起源和目录请参考 这里 . 背景 在自媒体的时代,音视频播放 俨然已成为内容类型 APP 最基础的能力,对于 Android 开发者而言,无论是 Goo ...

  9. android清除缓存 代码,Android应用开发之Android应用清除缓存一般清理目录和代码的教程...

    本文将带你了解Android应用开发Android应用清除缓存一般清理目录和代码的教程,希望本文对大家学Android有所帮助. 一个应用安装完成,会有缓存,缓存一般分为内部存储的和外置的,内存中路径 ...

最新文章

  1. python辅助脚本教程_微信跳一跳python辅助脚本实例分享
  2. 数据段、代码段、堆栈段、BSS段
  3. 【leetcode】在MATLAB中,有一个非常有用的函数 reshape,它可以将一个矩阵重塑为另一个大小不同的新矩阵,但保留其原始数据。
  4. 智能优化算法总结-数字孪生下的车间调度-APS预告
  5. python计算圆环的面积_基于Python制作美观动态圆环图、饼图
  6. lammps教程:velocity命令三种使用方法
  7. SqlSugar-执行Sql语句查询实例
  8. 项目经理最核心的能力是什么?
  9. 软件体系结构风格---基于事件的隐式调用
  10. OpenSSL爆出严重bug漏洞 Heartbleed bug CVE-2014-0160
  11. 指标之王macd的计算公式和使用方法
  12. 计算机管理 未分配磁盘,win7系统对未分配磁盘空间进行分区的操作方法
  13. 智商黑洞(门萨Mensa测试)1
  14. JS输出26个英文大小写字母
  15. python二进制格式追加_Python追加/填充二进制文件添加garbag
  16. No.13 Not Shading
  17. unity碰撞检测函数,碰撞信息获取,触发检测,使用粒子系统创建火焰,创建动画(火光闪烁),导航系统,通过导航系统控制人物移动,控制摄像机的跟随,控制角色动画播放
  18. 二阶线性微分方程解的结构(齐次与非齐次)+ 常数变易法 | 高阶微分方程(二)
  19. 医院住院管理信息系统设计说明书+源码
  20. Codeforces 104C Cthulhu dfs暴力 || 点双连通缩点

热门文章

  1. 剑指offer五:两个栈实现一个队列
  2. python八:列表(list)
  3. Linux 常见的六大 IPC 通信方式
  4. easyui combobox设置只读属性
  5. weblogic负载分发
  6. 分布式 Socket 通信
  7. “蓝桥杯”基础练习:01字串
  8. 读书笔记《如何阅读一本书》之二
  9. Ruby --- gem(RubyGems)安装与使用
  10. oracle语句mysql数据库名称_查询oracle数据库中当前数据库所有表的名称