移动设备上的开发,最重要的一点就是耗电量问题,再优秀的软件,假如耗电量过大的话,必然会成为一个失败的产品。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中应用法度的代码也会停止运行。


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数据包工具,这样一来,被攻击的手机至少耗电量将会大幅度上升。

更多相关文章

  1. ubuntu中adb安装与使用,android真机调试进入data/data目录
  2. android studio :利用安卓真机USB调试安卓程序
  3. Android(安卓)使用模板生成Word文档,支持手机直接查看word
  4. android 实现从网络上抓取图片并显示在手机上
  5. 为什么Android将掀起一场手机领域的狂风(Why Android(安卓)will
  6. Docker+Appium实现同时在多台手机上进行Android单元自动化测试
  7. 你真的相信Android手机有加速秘技?这三个旧习惯该改改了
  8. Android相机实时自动对焦的完美实现
  9. IIS 或者 Tomcat 处理android手机自带浏览器无法识别apk文件

随机推荐

  1. android2.2中默认浏览器无法使用手势放大
  2. android tips—NumberPicker,DataPicker,Ti
  3. Android 判断应用是否开启了通知权限
  4. Android图形架构分析总结
  5. Ionic开发遇到的问题和解决方法
  6. 在AndroidManifest.xml文件中的android:w
  7. Android 5.0 SystemUI 视图框架
  8. Android实现MVVM+LiveData+Retrofit
  9. android图片资源转换
  10. 安卓历代版本