转载自: http://blog.csdn.net/kesenhoo/article/details/7396321

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操作。
  1. 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;
    }

后记:想要最大化效率与最小化电量的消耗,需要考虑的东西太多了,通常来说,会根据app的功能需求来选择有所侧重,那么前提就是需要了解到底哪些对效率的影响比较大,这有利于我们做出最优选择。

学习自:http://developer.android.com/training/efficient-downloads/connectivity_patterns.html

转载请注明出处:http://blog.csdn.net/kesenhoo,谢谢!

[Android Traffic] 根据网络类型更改下载模式的更多相关文章

  1. android网络类型之2G-3G切换

    在android手机‘设置’-‘移动网络类型’里可以看到有关网络类型的选项,一般默认为3G优先. 如果有需要在程序中切换网络类型的朋友,不妨试试下面的方法.这里提供了几种思路,虽然可能对待 手机的方式 ...

  2. Android ImageCache图片缓存,使用简单,支持预取,支持多种缓存算法,支持不同网络类型,扩展性强

    本文主要介绍一个支持图片自动预取.支持多种缓存算法的图片缓存的使用及功能.图片较大需要SD卡保存情况推荐使用ImageSDCardCache. 与Android LruCache相比主要特性:(1). ...

  3. 【Java/Android性能优 6】Android 图片SD卡缓存 使用简单 支持预取 支持多种缓存算法 支持不同网络类型 支持序列化

    本文转自:http://www.trinea.cn/android/android-imagesdcardcache/ 本文主要介绍一个支持图片自动预取.支持多种缓存算法.支持数据保存和恢复的图片Sd ...

  4. 【Java/Android性能优5】 Android ImageCache图片缓存,使用简单,支持预取,支持多种缓存算法,支持不同网络类型,扩展性强

    本文转自:http://www.trinea.cn/android/android-imagecache/ 主要介绍一个支持图片自动预取.支持多种缓存算法.支持二级缓存.支持数据保存和恢复的图片缓存的 ...

  5. Android开发之从网络URL上下载JSON数据

    网络下载拉取数据中,json数据是一种格式化的xml数据,非常轻量方便,效率高,体验好等优点,下面就android中如何从给定的url下载json数据给予解析: 主要使用http请求方法,并用到Htt ...

  6. Android实现网络多线程断点续传下载(转)

    本示例介绍在Android平台下通过HTTP协议实现断点续传下载. 我们编写的是Andorid的HTTP协议多线程断点下载应用程序.直接使用单线程下载HTTP文件对我们来说是一件非常简单的事.那么,多 ...

  7. Android 判断当前网络连接类型

    实际应用开发时,如果存在需要用户获取大量数据的情况,最好是先判断下网络类型,提示用户当前的网络类型,是否需要连接Wifi,etc.(手机流量太贵啦,当然土豪是无视这玩意的, (/ □ \)). 定义网 ...

  8. Android实现网络多线程断点续传下载

    本示例介绍在Android平台下通过HTTP协议实现断点续传下载. 我们编写的是Andorid的HTTP协议多线程断点下载应用程序.直接使用单线程下载HTTP文件对我们来说是一件非常简单的事.那么,多 ...

  9. Android判断用户的网络类型(2/3/4G、wifi)

    很多时候需要先判断当前用户的网络,才会继续之后的一些处理逻辑.但网络类型获取这一块,我用我自己的的手机调试时遇到一些问题,这里记录一下. 一加手机一代,移动4G 网络,得到的subtype类型值为17 ...

随机推荐

  1. 创建虚拟机流程nova

    这篇博文借鉴于http://www.cnblogs.com/yjbjingcha/p/6977741.html,感谢博友提供. 本文试图具体地描写叙述openstack创建虚拟机的完整过程.从用户发起 ...

  2. regex & tab spaces

    regex & tab spaces txt file format let x = `2018-10-20a2018-10-20a2018-10-20a`; x.replace(/a/ig, ...

  3. [hdu6435]Problem J. CSGO

    题目大意:给定$n$个$A$类元素和$m$个$B$类元素,每类元素有值$S$和$k$个值$x_0,x_1,\dots,x_{k-1}(k\leqslant 5)$. 要求选出一个$A$类元素$a$和$ ...

  4. [bzoj1798][Ahoi2009]Seq 维护序列seq ([洛谷P3373]【模板】线段树 2)

    题目大意:有$n$个数,有$m$个操作,有三种: $1\;l\;r\;x:$把区间$[l,r]$内的数乘上$x$ $2\;l\;r\;x:$把区间$[l,r]$内的数加上$x$ $3\;l\;r:$询 ...

  5. bzoj4772 显而易见的数论

    题意:http://www.lydsy.com/JudgeOnline/problem.php?id=4772 sol :这个题卡了我一整天QAQ 出题人简直丧心病狂,卡内存+卡常数QAQ 题意就是, ...

  6. [USACO06NOV]玉米田Corn Fields (状压$dp$)

    题目链接 Solution 状压 \(dp\) . \(f[i][j][k]\) 代表前 \(i\) 列中 , 已经安置 \(j\) 块草皮,且最后一位状态为 \(k\) . 同时多记录一个每一列中的 ...

  7. Bzoj2165 大楼

    Time Limit: 40 Sec  Memory Limit: 259 MBSubmit: 779  Solved: 285[Submit][Status][Discuss] Descriptio ...

  8. win8.1 安装sql2008 启动报错.net framework 应用程序的组件中发生了异常unable to read the previous list

    解决方案:删除 RegSrvr.xml C:\Documents and Settings\Administrator\Application Data\Microsoft\Microsoft SQL ...

  9. Linux中brk()系统调用,sbrk(),mmap(),malloc(),calloc()的异同【转】

    转自:http://blog.csdn.net/kobbee9/article/details/7397010 brk和sbrk主要的工作是实现虚拟内存到内存的映射.在GNUC中,内存分配是这样的:  ...

  10. POCO库中文编程参考指南(1)总览

    POCO库中文编程参考指南(1)总览 作者:柳大·Poechant 博客:Blog.CSDN.net/Poechant 邮箱:zhongchao.ustc#gmail.com (# -> @) ...