【Android Training - Connectivity】优化下载的效率[Lesson 4 - 根据网络类型更改下载模式]
来源:互联网 发布:2017淘宝禁止开店 编辑:程序博客网 时间:2024/05/06 02:20
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 Training - Connectivity】优化下载的效率[Lesson 4 - 根据网络类型更改下载模式]
- 【Android Training - Connectivity】优化下载的效率[Lesson 1 - 看无线电波如何影响网络操作]
- 【Android Advanced Training - 05】传输数据时避免电量的浪费[Lesson 4 - 根据网络类型更改下载模式]
- 【Android Training - Connectivity】优化下载的效率[Lesson 3 - 使用缓存来避免重复的下载]
- 【Android Training - Connectivity】优化下载的效率[Lesson 0 - 章节概览]
- 【Android Training - Connectivity】优化下载的效率[Lesson 2 - 调整定时更新的频率(C2DM与退避算法)]
- 【Android Training - Connectivity】基本网络操作 [ Lesson 1 - 如何连接到网络的经典示例 ]
- 【Android Training - Connectivity】基本网络操作 [ Lesson 2 - 管理网络连接的常用方法 ]
- 【Android Training - Connectivity】基本网络操作 [ Lesson 0 - 章节概览 ]
- 【Android Training - Performance】优化电池续航能力[Lesson 2 - 判断设备的停驻模式与类型]
- 【Android Training - Connectivity】基本网络操作 [ Lesson 3 - 详解如何解析XML数据 ]
- Android Training - 创建自定义的Views(Lesson 4 - 优化Views)
- 【Android Advanced Training - 05】传输数据时避免电量的浪费[Lesson 3 - 使用缓存来避免重复的下载]
- 【Android Training UI】创建自定义的Views(Lesson 4 - 优化View的性能)
- 【Android Training - Graphics】高效地显示Bitmap图片(Lesson 4 - 优化Bitmap的内存使用)
- 【Android Training - Performance】优化电池续航能力[Lesson 3 - 判断并监测网络连接状态]
- [Android实例] 下载网络图片 涉及ListView的优化
- Android Training - 提升布局文件的性能(Lesson 1 - 优化布局的层级)
- 在主板RAID上(俗称的FakeRAID)安装UBUNTU10.04
- 中断处理和中断的下半部
- js事件大全
- Java语言基础细节归纳
- Android中在界面上动态显示歌词
- 【Android Training - Connectivity】优化下载的效率[Lesson 4 - 根据网络类型更改下载模式]
- 集合相关
- static、extern分析总结
- 【Android进阶】天天动听 悬浮歌词(迷你歌词)效果解读
- 【郭林专刊】jQuery中ajax的使用和缓存问题解决
- python线程池处理文件和Queue
- 改变文件系统的读写属性
- 起源、纲领及其他
- linux-unixODBC-mysql-c++_2012-0326