【Android Advanced Training - 05】传输数据时避免电量的浪费[Lesson 3 - 使用缓存来避免重复的下载]
来源:互联网 发布:java中传输的中文乱码 编辑:程序博客网 时间:2024/05/19 05:39
【Android Advanced Training - 05】传输数据时避免电量的浪费[Lesson 3 - 使用缓存来避免重复的下载]
分类: Android2012-03-26 17:59 821人阅读 评论(0) 收藏 举报
Redundant Downloads are Redundant[重复下载是冗余的]
- 减少下载的最基本方法是仅仅下载那些你需要的[美国人的思维还是比较直接,虽然这句话看起来比较搞笑,但是很有道理]。从数据的角度看,我们可以通过传递类似上次更新时间这样的参数来制定查询某些数据。
- 同样,在下载图片的时候,server那边最好能够减少图片的大小,而不是让我们下载完整大小的图片。
Cache Files Locally [缓存文件到本地]
- 避免下载重复的数据是很重要的。可以使用缓存机制来处理这个问题。缓存static的资源,例如完整的图片。这些缓存的资源需要分开存放。
- 为了保证app不会因为缓存而导致显示的是旧数据,请从缓存中获取最新的数据,当数据过期的时候,会提示进行刷新。
- 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,看下面的例子:
- 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的实例。
- 【Android Advanced Training - 05】传输数据时避免电量的浪费[Lesson 3 - 使用缓存来避免重复的下载]
- 【Android Advanced Training - 05】传输数据时避免电量的浪费[Lesson 4 - 根据网络类型更改下载模式]
- 【Android Advanced Training - 05】传输数据时避免电量的浪费[Lesson 1 - 看无线电波如何影响网络操作]
- 【Android Advanced Training - 05】传输数据时避免电量的浪费[Lesson 2 - 调整定时更新的频率(C2DM与退避算法)]
- 【Android Training - Connectivity】优化下载的效率[Lesson 3 - 使用缓存来避免重复的下载]
- 如何避免添加的数据重复
- mysql 插入数据避免重复的手段
- android 避免线程的重复创建
- 【Android Training - Performance】优化电池续航能力[Lesson 1 - 监测设备的电量与充电状态]
- Android Training - 提升布局文件的性能(Lesson 4 - 使用ViewHolder来提升ListView的性能)
- 使用Dojo实现页面不刷新提交数据时避免前台缓存的方法
- jsp中如何避免客户端浏览器在刷新时,使用缓存的数据
- jsp中如何避免客户端浏览器在刷新时,使用缓存的数据
- 【Android Training - UserInfo】记住登入用户的信息[Lesson 1 - 使用AccountManager来记住用户]
- 避免重复下载
- 【Android Training - 09】高效地显示Bitmap图片 [ Lesson 3 - 两种缓存Bitmap的方式 ]
- 表单提交数据的方式,以及避免数据重复提交
- 避免创建重复的对象
- 关于软件设计文档
- S5PV210 显示控制器及framebuffer驱动s3c-fb.c中probe函数分析
- oracle查询/子查询/复制表和数据
- Ext 修改 store 数据
- 关于Predicate<T>委托
- 【Android Advanced Training - 05】传输数据时避免电量的浪费[Lesson 3 - 使用缓存来避免重复的下载]
- 禅道程序员的10条原则【时刻提醒自己】
- unix 高级I/O详解
- 编译modis 出现 LINK : fatal error LNK1104: 无法打开文件“XXX.lib"
- 委托
- Android 多线程编程(整理)
- IResource.isSynchronized(int depth)_用法
- 【Android Advanced Training - 05】传输数据时避免电量的浪费[Lesson 4 - 根据网络类型更改下载模式]
- 碎片化