Android---冗余的下载是多余的
来源:互联网 发布:开票软件打不开没响应 编辑:程序博客网 时间:2024/05/18 01:01
本文译自:http://developer.android.com/training/efficient-downloads/redundant_redundant.html
减少下载的最基本的方法是只下载必要的数据,在数据方面,意味着要实现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 <lastUpdateTime) {
// Skip update
} else {
// Parse update
}
使用这种方法,还可以有效的缓存动态内容,同时确保不会导致应用程序显示过期的信息。
你可以在非托管的缓存目录中缓存非敏感数据:
Context.getExternalCacheDir();
还可以使用托管或安全的应用程序缓存。需要注意的是,这种内部缓存可能在系统运行时内存低于可用存储时被清空。
Context.getCache();
存储在缓存位置的文件会在应用程序卸载时被删除。
使用HttpURLConnection响应缓存
Android4.0把一个响应缓存添加到HttpURLConnection类中。你可以使用下列反射方法,在被支持的设备上启用HTTP响应缓存:
privatevoidenableHttpResponseCache(){
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请求可以直接从本地缓存中获取服务,而无需打开网络连接。有条件的缓存响应结果,可以有效的验证来自服务端的数据的新鲜度,从而消除相关下载的带宽成本。
从响应缓存中获取未被缓存的响应会引发新的请求。
- Android---冗余的下载是多余的
- 难道申明函数是多余的吗?
- C# private 声明符的疑惑 是多余的吗
- android 让多余的文字不显示
- Android Studio清理多余的资源文件
- 【Android】去除小数点后多余的零
- 冗余的New
- 数字图像的冗余
- 数字图像的冗余
- python的冗余参数
- C++ 标准库中的allocator是多余的
- TCP快速重传为什么是三次冗余ack,这个三次是怎么定下来的?
- TCP快速重传为什么是三次冗余ack,这个三次是怎么定下来的?
- 如何查看下载的android源码是哪个版本的
- 如何查看下载的android源码是哪个版本的
- 如何查看下载的android源码是哪个版本的
- 如何查看下载的android源码是哪个版本的
- 问:flashbuilder多余的导入会导致自动编译脚本执行报错(错误:找不到定义)? 答:Ctrl+Shift+O 去掉冗余的导入。
- 符号的英文读法
- 嵌入式Linux 三星s5pv210 USB WIFI驱动的移植
- mysql局域网访问设置
- 栈和堆的区别
- java对象和josn对象之间的互相装换
- Android---冗余的下载是多余的
- IOS一个滚动视图的小例子(代码)
- 开篇-HOG提取训练检测+样本制作
- 存储过程之联合事务
- 王位爭奪 (朝鮮歷史 韓長庚)
- Longest common subsequence problem (最长公共字串)
- 如何在SharePoint中隐藏回收站
- 百度音乐接口的应用
- OpenCV中的HOG+SVM物体分类