博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android休眠问题探讨(1)
阅读量:7089 次
发布时间:2019-06-28

本文共 1016 字,大约阅读时间需要 3 分钟。

  hot3.png

移动设备上的开发,最重要的一点就是耗电量问题,再优秀的软件,假如耗电量过大的话,必然会成为一个失败的产品。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数据包工具,这样一来,被攻击的手机至少耗电量将会大幅度上升。

转载于:https://my.oschina.net/asher/blog/103511

你可能感兴趣的文章
JMeter性能测试入门篇,超详细
查看>>
Use custom widgets with Qt Designer: Promotion technique
查看>>
点滴积累【JS】---JS小功能(onmousedown实现鼠标拖拽div移动)
查看>>
BinaryReader 、BinaryWriter是方便用二进制方式读写int,double,string之类的数据
查看>>
(转)Linux下运行python
查看>>
【转】解决weblogic启动慢和创建域慢的方法
查看>>
信息安全基础第一周作业
查看>>
GET和POST区别
查看>>
MySql 数据库系列问题
查看>>
BFC是什么?有什么作用?
查看>>
010.简单查询、分组统计查询、多表连接查询(sql实例)
查看>>
3_Windows下利用批处理文件_去除C源代码中指示行号的前导数字
查看>>
Bzoj 1853: [Scoi2010]幸运数字 容斥原理,深搜
查看>>
Hdu 4311-Meeting point-1 曼哈顿距离,前缀和
查看>>
docker网络介绍之bridge网络详解
查看>>
两个PHP方面的东西,超过2038的时间和唯一订单号算法
查看>>
凡事预则立
查看>>
函数的定义域【基础辅导】
查看>>
Selenium 自动化验收测试
查看>>
Alpha冲刺随笔集
查看>>