注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好。

原文链接:http://developer.android.com/training/efficient-downloads/connectivity_patterns.html


不同连接类型对于电池寿命的影响是不一样的。首先使用Wi-Fi会比使用无线网络(比如GPRS)消耗的电量小的多。而且不同的通信技术对于电量的影响也是有很大差异的。


一). 使用Wi-Fi

在大多数情况下一个Wi-Fi连接会提供更大的带框而消耗的电量却更低。所以说你必须尽量通过Wi-Fi来连接数据。

你可以使用一个广播接收器来监听连接状态的变化。当建立了Wi-Fi连接后,执行大量的数据下载,计划更新,甚至临时性地增加计划更新的频率。具体的细节可以阅读Optimizing Battery Life课中的Determining and Monitoring the Connectivity Status


二). 使用更大的带宽,在更低的频率下去下载更多的数据

当用无线电连接时,更大的带宽通常意味着更多的电量消耗。所以这就意味着LTE会比3G消耗更多的电量,也比2G的价钱更高。

这意味着虽然底层的无线电状态机会随着实现的技术不同而不同,但通常来说,更大带宽的无线电技术意味着在状态切换时间阶段对电池的影响也会更大。

同时,更高的带宽意味着你可以预取更多的数据,在同一时间段内下载更多的数据。不太直观地说,因为尾时间的电池消耗相对而言要更高,所以不如对每一个传输数据的会话,保持无线电在活跃的状态从而减少更新的频率,这样可能会效率更高一些。

例如,如果一个LTE网络和3G网络相比具有2倍的带宽和2倍的能量消耗,你应该在每一个会话下载4倍的数据——大约是10mb的数据。当下载了这么多数据后,还需要考虑预取对于本地存储的影响,并且定期刷新你的预取缓存。

你可以使用connectivity manager来确定当前的连接状态,并相应地修改你的预取策略:

  1. ConnectivityManager cm =
  2. (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
  3.  
  4. TelephonyManager tm =
  5. (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
  6.  
  7. NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
  8.  
  9. int PrefetchCacheSize = DEFAULT_PREFETCH_CACHE;
  10.  
  11. switch (activeNetwork.getType()) {
  12. case (ConnectivityManager.TYPE_WIFI):
  13. PrefetchCacheSize = MAX_PREFETCH_CACHE; break;
  14. case (ConnectivityManager.TYPE_MOBILE): {
  15. switch (tm.getNetworkType()) {
  16. case (TelephonyManager.NETWORK_TYPE_LTE |
  17. TelephonyManager.NETWORK_TYPE_HSPAP):
  18. PrefetchCacheSize *= 4;
  19. break;
  20. case (TelephonyManager.NETWORK_TYPE_EDGE |
  21. TelephonyManager.NETWORK_TYPE_GPRS):
  22. PrefetchCacheSize /= 2;
  23. break;
  24. default: break;
  25. }
  26. break;
  27. }
  28. default: break;
  29. }

【Android Developers Training】 86. 基于连接类型修改您的下载模式的更多相关文章

  1. 【Android Developers Training】 100. 使用Intent修改联系人数据

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  2. 【Android Developers Training】 79. 连接到网络

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  3. 【Android Developers Training】 82. 序言:传输数据时减少对电池寿命的影响

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  4. 【Android Developers Training】 97. 序言:访问通讯录数据

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  5. 【Android Developers Training】 78. 序言:执行网络操作

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  6. 【Android Developers Training】 76. 用Wi-Fi创建P2P连接

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  7. 【Android Developers Training】 107. 认知用户当前的行为

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  8. 【Android Developers Training】 106. 创建并检测地理围栏

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  9. 【Android Developers Training】 96. 运行一个同步适配器

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

随机推荐

  1. JAVA进程占用CPU分析

    在一次生产环境中,服务器负载报警,SSH登录上看到CPU占用很高. 1.执行top命令,看到进程号为9737的进程持续占用CPU 2.怀疑是否是进程配置的内存不够了,引发了fullGC导致CPU占用高 ...

  2. winXP/win7/win10系统关闭445端口方法全攻略

    近日有多个高校发布了关于连接校园网的电脑大面积中勒索病毒的消息,这种病毒致使许多高校毕业生的毕业论文(设计)被锁.受害机器的磁盘文件会被篡改为相应的后缀,图片.文档.视频.压缩包等各类资料都无法正常打 ...

  3. 简单实现服务器/客户端的c代码

    #include<stdio.h> #include<stdlib.h> #include<string.h> #include<sys/types.h> ...

  4. web基础之会话技术

    一.会话技术之Cookie Cookie技术是将数据存储到客户端 1.怎样去向客户端写出一个cookie 1)创建Cookie对象 Cookie cookie = new Cookie(name,va ...

  5. 【小错误】WPF代码报错:未将对象引用设置到对象的实例。

    今天编写动态创建Image对象的代码时候,报出了下面的错误: 起初还以为我创建的BitmapImage对象出现了问题,设置断点调试了下代码发现BitmapImage里面是有数据的. 我就郁闷了,后来发 ...

  6. Java Final and Immutable

    1. Final keyword Once a variable X is defined final, you can't change the reference of X to another ...

  7. HourRank 20

    第一题略 第二题组合数学 s1 = min(cnt['a'],cnt['b']), s2 = min(cnt['c'],cnt['d']), b1 = max(cnt['a'],cnt['b']), ...

  8. Python LED

    led.py from gpiozero import LED from time import sleep led = LED(17) while True: print "start c ...

  9. Java IO流学习总结(2)

    写在前面:本文章基本覆盖了java IO的全部内容,java新IO没有涉及,因为我想和这个分开,以突出那个的重要性,新IO哪一篇文章还没有开始写,估计很快就能和大家见面.照旧,文章 依旧以例子为主,因 ...

  10. vue组件之间的通信以及如何在父组件中调用子组件的方法和属性

    在Vue中组件实例之间的作用域是孤立的,以为不能直接在子组件上引用父组件的数据,同时父组件也不能直接使用子组件的数据 一.父组件利用props往子组件传输数据 父组件: <div> < ...