您的位置:首页 > 理论基础 > 计算机网络

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。^_^
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 网络 省电 优化