Android网络优化之省电策略
2015-03-12 01:46
197 查看
转载请注明出处:http://blog.csdn.net/andywant2fly/article/details/44210129
如何减少在3G移动网络上的耗能,我们先来了解一下3G网络状态机(4G类似)。
根据AT&T的提供的典型3G网络状态机,可以把3G网络状态分为:Full Power、Low Power和Standby。
Full Power:存在活跃连接,允许数据高速传输,耗电最高,应用每次数据传输都处于该状态;
Low Power:使用低速共享信道,传输速率低于15kbps,耗电是Full Power状态的一半,一般情况下,我们无法直接在程序中进入该状态,由Full Power状态降级进入;
Standby:无活跃连接,耗电最少。
为了保证传输效率,各状态都会保持一定的时间,防止频繁切换状态带来的效率问题。Full Power状态在5s内无活跃连接则降级进入Low Power状态,Low Power状态保持12s,无活跃连接则进入Standby状态。Low Power状态进入Full Power状态需要1.5s的延迟,Standby进入Full Power状态需要2s延迟,Standby无法直接进入Low Power状态,从侧面说明我们无法在程序中控制直接进入Low Power状态传输。
详尽介绍可参考:http://developer.android.com/training/efficient-downloads/efficient-network-access.html
所以理想的传输状态应该如下所示:
|____数据传输(1M)____|__5s__|____12s_____|________休眠__________
但是实际情况往往如下:
|__数据传输(0.3M)__|_3s_|___数据传输(0.5M)___|__5s__|__1s__|_1.5s_|_数据传输(0.2M)_|__5s__|______12s_____|_____休眠______
根据状态机的理论基础,大概整理了一下,有以下优化的思路:
压缩传输数据,减少在Full power状态停留时间,gzip压缩文字数据、图像压缩和视频压缩等;
建立缓存,减少重复下载,常用的图片缓存、web资源缓存等;
使用长连接,链路复用,大量TCP连接建立和结束过程会浪费较多时间在三次握手和四次挥手,造成电量浪费;
请求管道化,如HTTP管道化,多个请求平行发送,而非停等模式;
批量传输,对数据实时性要求不高时,采用延迟策略,合并分散数据,一次传输;
预读数据,通过一次连接,在最大能力下,根据给出的时间下载到所有的数据,一般情况下视频会采用预读数据的方式。
除此之外,更重要的是弱网络环境下的电量节省。我们常常发现一旦手机信号变弱以后,电量消耗的速度会快速增加,只要一会手机就会变得很烫。这是因为此时手机的射频模块会以更大的功率和更高的频率去扫描信号,此时我们要做的就是采用一定的避让算法,避免在手机信号较弱的时候频繁去尝试重连。
省电,对于绝大多数应用来说并不一定是一个势在必行的主题,毕竟可用性和良好的体验才是最重要的,切不可本末倒置。这里提供的一些思路,仅希望在代码实践过程中能够兼顾一二,无需硬套。
最后,还有一个比较厉害的优化方案,就是去用高速WIFI。^_^
如何减少在3G移动网络上的耗能,我们先来了解一下3G网络状态机(4G类似)。
根据AT&T的提供的典型3G网络状态机,可以把3G网络状态分为:Full Power、Low Power和Standby。
Full Power:存在活跃连接,允许数据高速传输,耗电最高,应用每次数据传输都处于该状态;
Low Power:使用低速共享信道,传输速率低于15kbps,耗电是Full Power状态的一半,一般情况下,我们无法直接在程序中进入该状态,由Full Power状态降级进入;
Standby:无活跃连接,耗电最少。
为了保证传输效率,各状态都会保持一定的时间,防止频繁切换状态带来的效率问题。Full Power状态在5s内无活跃连接则降级进入Low Power状态,Low Power状态保持12s,无活跃连接则进入Standby状态。Low Power状态进入Full Power状态需要1.5s的延迟,Standby进入Full Power状态需要2s延迟,Standby无法直接进入Low Power状态,从侧面说明我们无法在程序中控制直接进入Low Power状态传输。
详尽介绍可参考:http://developer.android.com/training/efficient-downloads/efficient-network-access.html
所以理想的传输状态应该如下所示:
|____数据传输(1M)____|__5s__|____12s_____|________休眠__________
但是实际情况往往如下:
|__数据传输(0.3M)__|_3s_|___数据传输(0.5M)___|__5s__|__1s__|_1.5s_|_数据传输(0.2M)_|__5s__|______12s_____|_____休眠______
根据状态机的理论基础,大概整理了一下,有以下优化的思路:
压缩传输数据,减少在Full power状态停留时间,gzip压缩文字数据、图像压缩和视频压缩等;
建立缓存,减少重复下载,常用的图片缓存、web资源缓存等;
使用长连接,链路复用,大量TCP连接建立和结束过程会浪费较多时间在三次握手和四次挥手,造成电量浪费;
请求管道化,如HTTP管道化,多个请求平行发送,而非停等模式;
批量传输,对数据实时性要求不高时,采用延迟策略,合并分散数据,一次传输;
预读数据,通过一次连接,在最大能力下,根据给出的时间下载到所有的数据,一般情况下视频会采用预读数据的方式。
除此之外,更重要的是弱网络环境下的电量节省。我们常常发现一旦手机信号变弱以后,电量消耗的速度会快速增加,只要一会手机就会变得很烫。这是因为此时手机的射频模块会以更大的功率和更高的频率去扫描信号,此时我们要做的就是采用一定的避让算法,避免在手机信号较弱的时候频繁去尝试重连。
省电,对于绝大多数应用来说并不一定是一个势在必行的主题,毕竟可用性和良好的体验才是最重要的,切不可本末倒置。这里提供的一些思路,仅希望在代码实践过程中能够兼顾一二,无需硬套。
最后,还有一个比较厉害的优化方案,就是去用高速WIFI。^_^
相关文章推荐
- Android进阶——性能优化之尽量多使用AsyncTask进行短时间网络通信
- 网络爬虫:采用“负载均衡”策略来优化网络爬虫
- Android中加载网络资源时的优化可使用(线程+缓存)解决
- Android网络优化6--写一个网络请求模板2--基于Volley
- android 网络加载图片,对图片资源进行优化,并且实现内存双缓存 + 磁盘缓存
- Android网络优化之HttpClient
- android 网络加载图片,对图片资源进行优化,并且实现内存双缓存 + 磁盘缓存
- EasyPlayer Android RTSP播放器延迟再优化策略
- android网络优化
- 小数据包网络发送的优化策略
- Android App优化之网络优化
- Android网络编程六:(2)Universal-Image-Loader之缓存策略
- Android性能优化二 电量优化、网络优化、对象池、bitmap解码率
- Android之ListView异步加载网络图片(优化缓存机制)
- Android性能优化之线程池策略和对线程池的了解
- android优化之省电
- android 优化策略
- Android应用的电量消耗和优化的策略
- Android性能优化策略
- Android网络图片加载优化