【Android Advanced Training - 05】传输数据时避免电量的浪费[Lesson 4 - 根据网络类型更改下载模式]
来源:互联网 发布:淘宝购物车能放超过100 编辑:程序博客网 时间:2024/05/19 02:28
【Android Advanced Training - 05】传输数据时避免电量的浪费[Lesson 4 - 根据网络类型更改下载模式]
分类: Android2012-03-26 21:36 707人阅读 评论(0) 收藏 举报
Modifying your Download Patterns Based on the Connectivity Type
[根据连接的网络类型来更改下载模式]
- 并不是所有的网络类型(Wi-Fi,3G,2G,etc)对电量的消耗是同等的。不仅仅Wi-Fi电波比无线电波消耗的电量要少很多,而且不同的无线电波(3G,2G,LTE……)也存在使用不同电量的区别。
Use Wi-Fi [使用Wi-Fi]
- 在大多数情况下,Wi-Fi电波会在使用相对较低的电量的情况下提供一个相对较宽的带宽。因此,我们需要努力争取尽量使用Wi-Fi来传递数据。
- 我们可以使用Broadcast Receiver来监听当网络连接切换为Wi-Fi,这个时候我们可以进行大量的数据传递操作,例如下载,执行定时的更新操作,甚至是在这个时候加大更新的频率。这些内容都可以在前面的课程中找到。
Use Greater Bandwidth to Download More Data Less Often [使用更大的带宽来下载更多的数据,而不是经常去下载]
- 当通过无线电进行连接的时候,更高的带宽通常伴随着更多的电量消耗。这意味这LTE(一种4G网络制式)会比3G制式消耗更多,当然比起2G,那就更是如此。
- 从Lesson 1我们知道了无线电状态机是怎么回事,通常来说相对更宽的带宽网络制式会有更长的状态切换时间(也就是从full power过渡到standby有一段时间的延迟)。
- 同时,更宽的带宽意味这可以更贪婪的进行prefetch,下载更多的数据。也许这个说法不是很直观,因为过渡时间比较长,而过渡时间的长短我们无法控制,也就是过渡时间的电量消耗差不多是固定了,既然这样,我们在每次传输会话中为了减少更新的频率而把无线电激活的时间拉长,这样显的更有效率。
- 例如:如果LTE无线电的带宽与电量消耗都是3G无线电的2倍,我们应该在每次会话的时候都下载4倍于3G的数据量,或者是差不多10Mb(前面文章有说明3G一般每次下载2Mb)。当然,下载到这么多数据的时候,我们需要好好考虑prefetch本地存储的效率并且需要经常刷新预取的cache。
- 我们可以使用connectivity manager来判断当前激活的无线电波,并且根据不同结果来修改prefetch操作。
- ConnectivityManager cm =
- (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
- TelephonyManager tm =
- (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
- NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
- int PrefetchCacheSize = DEFAULT_PREFETCH_CACHE;
- switch (activeNetwork.getType()) {
- case (ConnectivityManager.TYPE_WIFI):
- PrefetchCacheSize = MAX_PREFETCH_CACHE; break;
- case (ConnectivityManager.TYPE_MOBILE): {
- switch (tm.getNetworkType()) {
- case (TelephonyManager.NETWORK_TYPE_LTE |
- TelephonyManager.NETWORK_TYPE_HSPAP):
- PrefetchCacheSize *= 4;
- break;
- case (TelephonyManager.NETWORK_TYPE_EDGE |
- TelephonyManager.NETWORK_TYPE_GPRS):
- PrefetchCacheSize /= 2;
- break;
- default: break;
- }
- break;
- }
- default: break;
- }
学习自:http://developer.android.com/training/efficient-downloads/connectivity_patterns.html
转载请注明出处:http://blog.csdn.net/kesenhoo,谢谢!
- 【Android Advanced Training - 05】传输数据时避免电量的浪费[Lesson 4 - 根据网络类型更改下载模式]
- 【Android Advanced Training - 05】传输数据时避免电量的浪费[Lesson 3 - 使用缓存来避免重复的下载]
- 【Android Advanced Training - 05】传输数据时避免电量的浪费[Lesson 1 - 看无线电波如何影响网络操作]
- 【Android Advanced Training - 05】传输数据时避免电量的浪费[Lesson 2 - 调整定时更新的频率(C2DM与退避算法)]
- 【Android Training - Connectivity】优化下载的效率[Lesson 4 - 根据网络类型更改下载模式]
- 【Android Training - Connectivity】优化下载的效率[Lesson 3 - 使用缓存来避免重复的下载]
- 【Android Training - Connectivity】优化下载的效率[Lesson 1 - 看无线电波如何影响网络操作]
- 【Android Training - Performance】优化电池续航能力[Lesson 2 - 判断设备的停驻模式与类型]
- 【Android Training - Performance】优化电池续航能力[Lesson 1 - 监测设备的电量与充电状态]
- android 关于网络连接之传输数据节省电量1
- android 关于网络连接之传输数据节省电量2
- 【Android Training - Connectivity】基本网络操作 [ Lesson 3 - 详解如何解析XML数据 ]
- Android Training - 创建自定义的Views(Lesson 4 - 优化Views)
- 【Android Training - Connectivity】基本网络操作 [ Lesson 1 - 如何连接到网络的经典示例 ]
- 【Android Training - Connectivity】基本网络操作 [ Lesson 2 - 管理网络连接的常用方法 ]
- 【Android Training - Connectivity】优化下载的效率[Lesson 0 - 章节概览]
- 【Android Training - 06】分享数据内容 [Lesson 1 - 发送分享的数据到其他App]
- 【Android Training - 06】分享数据内容 [Lesson 1 - 发送分享的数据到其他App]
- unix 高级I/O详解
- 编译modis 出现 LINK : fatal error LNK1104: 无法打开文件“XXX.lib"
- 委托
- Android 多线程编程(整理)
- IResource.isSynchronized(int depth)_用法
- 【Android Advanced Training - 05】传输数据时避免电量的浪费[Lesson 4 - 根据网络类型更改下载模式]
- 碎片化
- 堆和栈的区别(内存和数据结构)
- 定制自己的Home android
- Android实现按钮从两边移到中间动画效果(网上整理)
- #ifndef 在头文件中的作用
- 端口号无法打开
- session
- 一幅 诡异 神秘 恐惧的 美女灵图![胆小者误入]