【Android Training - Connectivity】优化下载的效率[Lesson 3 - 使用缓存来避免重复的下载]
来源:互联网 发布:丹尼斯c语言 编辑:程序博客网 时间:2024/05/16 11:57
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://blog.csdn.net/kesenhoo,谢谢!
- 【Android Training - Connectivity】优化下载的效率[Lesson 3 - 使用缓存来避免重复的下载]
- 【Android Advanced Training - 05】传输数据时避免电量的浪费[Lesson 3 - 使用缓存来避免重复的下载]
- 【Android Training - Connectivity】优化下载的效率[Lesson 4 - 根据网络类型更改下载模式]
- 【Android Training - Connectivity】优化下载的效率[Lesson 0 - 章节概览]
- 【Android Training - Connectivity】优化下载的效率[Lesson 1 - 看无线电波如何影响网络操作]
- 【Android Training - Connectivity】优化下载的效率[Lesson 2 - 调整定时更新的频率(C2DM与退避算法)]
- 【Android Advanced Training - 05】传输数据时避免电量的浪费[Lesson 4 - 根据网络类型更改下载模式]
- 【Android Training - Connectivity】基本网络操作 [ Lesson 1 - 如何连接到网络的经典示例 ]
- 【Android Training - Connectivity】基本网络操作 [ Lesson 2 - 管理网络连接的常用方法 ]
- Android Training - 提升布局文件的性能(Lesson 4 - 使用ViewHolder来提升ListView的性能)
- 【Android Training - UserInfo】记住登入用户的信息[Lesson 1 - 使用AccountManager来记住用户]
- Android Training - 创建自定义的Views(Lesson 4 - 优化Views)
- 【Android Training - Graphics】高效地显示Bitmap图片(Lesson 4 - 优化Bitmap的内存使用)
- 【Android Training - 09】高效地显示Bitmap图片 [ Lesson 3 - 两种缓存Bitmap的方式 ]
- 【Android Training - Connectivity】基本网络操作 [ Lesson 3 - 详解如何解析XML数据 ]
- 【Android Training - Connectivity】基本网络操作 [ Lesson 0 - 章节概览 ]
- 【Android Training - UserInfo】记住登入用户的信息[Lesson 2 - 使用OAuth2来进行身份鉴定]
- 【Android Training - 03】使用Fragments建立动态的UI [ Lesson 3 - 创建灵活可变的UI ]
- (64位)Ubuntu下Android开发环境搭建
- tomcat下配置虚拟目录
- 如何将sql server 2000的数据库还原到sql server 2005里使用?
- ubuntu各版本的意义
- Struts2实现多个文件上传的示例
- 【Android Training - Connectivity】优化下载的效率[Lesson 3 - 使用缓存来避免重复的下载]
- 关于FLEX自定义组件
- DataTable删除指定的内容
- Ubuntu系统截图方法介绍
- java基础加强视频zxx(1-32)
- 微软联手诺基亚投资1800万欧元用于大学”WP“应用开发项目
- error LNK2005: _DllMain@12 already defined in xxx.OBJ 解决办法
- Tomcat服务器无法运行,出现Bad Request (Invalid Hostname)错误
- Windows平台的计时器