Android---冗余的下载是多余的
减少下载的最基本的方法是只下载必要的数据,在数据方面,意味着要实现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
} 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请求可以直接从本地缓存中获取服务,而无需打开网络连接。有条件的缓存响应结果,可以有效的验证来自服务端的数据的新鲜度,从而消除相关下载的带宽成本。
从响应缓存中获取未被缓存的响应会引发新的请求。
- 01-11全球最受赞誉公司揭晓:苹果连续九年第一
- 12-09罗伯特·莫里斯:让黑客真正变黑
- 12-09谁闯入了中国网络?揭秘美国绝密黑客小组TA
- 12-09警示:iOS6 惊现“闪退”BUG
- 05-06TCL科技:预计大尺寸面板价格上涨动能有望延
- 05-06新加坡电信Optus任命新首席执行官以重建品牌
- 05-06微软宣布为消费级用户账户提供安全密钥支持
- 05-06当好大数据产业“守门员”(筑梦现代化 共绘
- 04-29通用智能人“通通”亮相中关村论坛