【Android Advanced Training - 05】传输数据时避免电量的浪费[Lesson 3 - 使用缓存来避免重复的下载]
2012-09-06 17:49
417 查看
【Android Advanced Training - 05】传输数据时避免电量的浪费[Lesson 3 - 使用缓存来避免重复的下载]
分类: Android2012-03-2617: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的实例。
学习自:http://developer.android.com/training/efficient-downloads/redundant_redundant.html,谢谢!
相关文章推荐
- 【Android Advanced Training - 05】传输数据时避免电量的浪费[Lesson 4 - 根据网络类型更改下载模式]
- 【Android Advanced Training - 05】传输数据时避免电量的浪费[Lesson 2 - 调整定时更新的频率(C2DM与退避算法)]
- 【Android Advanced Training - 05】传输数据时避免电量的浪费[Lesson 1 - 看无线电波如何影响网络操作]
- 【Android Training - Connectivity】优化下载的效率[Lesson 3 - 使用缓存来避免重复的下载]
- [Android Traffic] 使用缓存来避免重复的下载
- Android训练课程(Android Training) - 使用Volley传输网络数据(Transmitting Network Data Using Volley)
- 5.7_Android Training 学习笔记_ 使用 Volley 执行网络数据传输
- Android训练课程(Android Training) - 使用Volley传输网络数据(Transmitting Network Data Using Volley)
- android 关于网络连接之传输数据节省电量1
- 【转】使用TCP协议连续传输大量数据时,是否会丢包,应如何避免?
- android接口中json数据的传输中使用gzip压缩
- 使用scp进行远程数据传输时避免输入密码(scp without password)
- 使用httpclient实现上传下载(javaWeb系统数据传输http实现)
- 【Android Advanced Training - 03】高效地显示Bitmap图片 [ Lesson 0 - 章节概览 ]
- Android Training - 使用IntentService执行任务(Lesson 1 - 创建IntentService)
- 使用TCP协议连续传输大量数据时,是否会丢包,应如何避免?
- Android中在application中使用map集合缓存数据
- 网络传输中,对Json组织方式的数据的解析以及使用这个方法,模拟从服务器端下载数据
- android 开发技巧(2)--使用延迟加载以及避免代码重复
- Android中使用HttpURLConnection实现GET POST JSON数据与下载图片