以i2c控制器为例,在不需要传输数据的时候及时释放clock,代码示例如下:
如上所述,灭屏情况下的kernel休眠态、工作态、空闲态表现对灭屏功耗均起到关键的影响,因此,策略设计不合理、运行逻辑出现异常,都会造成灭屏耗电不理想。
回到前面提到的几个维度,kernel是否有触发休眠动作、是否频繁退出休眠状态、触发休眠后是否执行成功等关键信息可以在batterystats模块统计的信息中找到线索。然而,平台级别的休眠状态、外围器件的休眠状态,由于终端设备之间的差异性比较大,batterystas的覆盖还不够。
对于整机硬件系统,除了cpu之外,modem子系统、sensor子系统、audio子系统、wireless子系统往往也不可或缺,这些子系统对灭屏耗电影响也很大。
- Modem子系统:负责处理与基站相关的通信业务,承担着电话、短信、上网等业务。造成该子系统休眠差的原因有多种,比如业务联网频繁、小区切换频繁、无服务搜网、RRC连接不释放、弱信号重传多等。
- Sensor子系统:负责传感器业务需求、基础功能的支撑(比如抬手检测、计步检测、开合检测等),出于耗电的考虑,越来越多的传感器算法会转移到sensor子系统来实现。应用调用sensor是否合理、sensor的采样频率、省电模式的配置、算法实现的复杂度,是影响sensor子系统休眠与耗电表现的重要因素。
- Audio子系统:处理音频相关业务,比如音频播放、录音、特效算法等。三方应用的不合理使用(例如后台持续播放、录音行为)往往是造成audio子系统异常耗电的主要原因。
- Wireless子系统:该子系统往往集成了wifi、bt、gps、fm等无线功能模块,相应模块的作业状态直接影响该子系统的耗电表现。
随着业务需求的发展,手机终端的集成度越来越高,功能也越来越复杂,无论是硬件、底层设备驱动还是应用软件,在设计与实现时都需要充分考虑耗电影响,以本文提及的灭屏为例,围绕AP(工作态、空闲态、休眠态)以及特殊业务子系统进行硬件功耗优化、软件算法优化、耗电策略改善等,提升用户灭屏耗电体验。