Android休眠问题探讨(1)

移动设备上的开发,最重要的一点就是耗电量问题,再优秀的软件,假如耗电量过大的话,必然会成为一个失败的产品。Android设备上解决耗电的一个策略就是休眠,手机在锁屏以后一段时间手机就会休眠,那个时候,不管是屏幕,CPU仍是其余模块都会中止工做,这样致使了几个问题: 服务器

1.一些通信软件的心跳包中断,致使掉线 架构

2.若采用UDP链接的状况下,服务器过来的数据包不必定实时。 工具

咱们来说讲如何解决以上的两个问题。Android手机有两个处理惩罚器,一个叫Application Processor(AP),一个叫Baseband Processor(BP)。AP是ARM架构的处理处理器,用于运行Linux+Android体系;BP用于运行及时操纵体系(RTOS),通讯协议栈运行于BP的RTOS之上。非通话时候,BP的能耗基本在5mA如下,而AP只要处于非休眠情况,能耗至少在50mA以上,履行图形运算时会更高。别的LCD工做时功耗在100mA左右,WIFI也在100mA左右。通常手机待机时,AP、LCD、WIFI均进入休眠情况,这时Android中应用法度的代码也会中止运行。 spa


Android为了确保一些关键代码的正确运行,供给了Wake Lock的API,使得应用有权限经由过程代码阻拦AP进入休眠情况(iOS、WP7都没这种器材)。如果不懂得Android设计者的意图而滥用Wake Lock API,为了自身代码在后台的正常工做而长时候阻拦AP进入休眠情况,结果就至关严重了,手机的电量就犀利哗啦的被用完了。 设计


首先,彻底没需要为了AP休眠会致使收不到消息推送而发愁。通讯协议栈运行于BP,一旦收到数据包,BP会将AP唤醒,唤醒的时间足够AP完成对BP收到协议的处理,可是有一点须要你们注意的是,假如你处理协议包的时间很长的话,那么请加上wakelock,完成以后再释放掉。 开发

其次,须要注意的是,TCP长链接是能够将AP唤醒,可是UDP数据包并不会唤醒。。。具体的缘由多是由于底层对于TCP长链接的数据过来,会产生AP中断来唤醒AP,可是UDP不会。。。这么作也是有道理的,由于TCP长连接是客户端自身验证过的服务器,也就是数据来源可靠。。。若UDP也会唤醒,那彻底能够进行UDP数据包工具,这样一来,被攻击的手机至少耗电量将会大幅度上升。
相关文章
相关标签/搜索