Android---冗余的下载是多余的

浏览:
字体:
发布时间:2013-12-17 09:37:17
来源:
 

减少下载的最基本的方法是只下载必要的数据,在数据方面,意味着要实现REST API,这些API允许使用参数来指定查询条件,从而限定返回的数据,如指定最后一次更新的时间。

同样,当下载图片时,好的做法是在服务端减少图片的尺寸,而不是下载全尺寸的图片。

本地缓存文件

另一项重要的技术是避免下载重复的数据。可以通过缓存来做这件事情。只要合理,就始终要包一些静态资源,包括那些按需下载的诸如全尺寸的图片等放到缓存中。按需下载的资源应该被分开存储,这样可以定期的刷新这块缓存,以便管理缓存的大小。

为了确保缓存不会导致应用程序显示过期的数据,一定要提取最后更新的请求内容的时间,这个时间位于HTTP响应头中。这就允许你判断相关的内容被刷新的时机。

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 // Skip update
} else {
// Parse update
}

使用这种方法,还可以有效的缓存动态内容,同时确保不会导致应用程序显示过期的信息。

你可以在非托管的缓存目录中缓存非敏感数据:

Context.getExternalCacheDir();

还可以使用托管或安全的应用程序缓存。需要注意的是,这种内部缓存可能在系统运行时内存低于可用存储时被清空。

Context.getCache();

存储在缓存位置的文件会在应用程序卸载时被删除。

使用HttpURLConnection响应缓存

Android4.0把一个响应缓存添加到HttpURLConnection类中。你可以使用下列反射方法,在被支持的设备上启用HTTP响应缓存:

private voidenableHttpResponseCache() {
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 responsecache is unavailable.);
}
}

上述示例代码会在Android4.0以上的设备上打开响应缓存而不影响早期的版本。

使用被安装的缓存,HTTP请求可以直接从本地缓存中获取服务,而无需打开网络连接。有条件的缓存响应结果,可以有效的验证来自服务端的数据的新鲜度,从而消除相关下载的带宽成本。

从响应缓存中获取未被缓存的响应会引发新的请求。

>更多相关文章
24小时热门资讯
24小时回复排行
资讯 | QQ | 安全 | 编程 | 数据库 | 系统 | 网络 | 考试 | 站长 | 关于东联 | 安全雇佣 | 搞笑视频大全 | 微信学院 | 视频课程 |
关于我们 | 联系我们 | 广告服务 | 免责申明 | 作品发布 | 网站地图 | 官方微博 | 技术培训
Copyright © 2007 - 2024 Vm888.Com. All Rights Reserved
粤公网安备 44060402001498号 粤ICP备19097316号 请遵循相关法律法规
');})();