随着手机功能的不断丰富,算法复杂性、系统核心频率和集成水平不断提高,而设备的形制和尺寸不断缩小,手机热缓解的重要性日益凸显。
为了在手机开始过热时进行有效的热缓解,Android 引入了热系统,用于将热子系统硬件设备的接口抽象化,硬件接口包括设备表面、电池、GPU、CPU 和 USB 端口的温度传感器和热敏电阻。借助该框架,设备制造商和应用开发者可以主动获取这些系统硬件设备的温度数据,或者通过注册的回调函数(位于 PowerManager 类中)接收高温通知,进而在设备开始过热时调整系统及应用执行策略,降低系统负载。例如,当系统温度较高时,jobscheduler 作业会受到限制等,从而可以有效缓解手机发热问题。
一、 Android热服务上层可调用接口
Android 10 中的热服务利用 Thermal HAL 2.0 的监控底层设备各个节点温度等信息,系统内部组件和三方应用可通过调用相关接口获取这些反馈信息。
1. 三方应用可调用接口
对于上层Android应用来说,可通过调用 PowerManager 类来添加监听器回调或主动获取获取热状态等信息,方法如下:
-
getCurrentThermalStatus();//以整数形式返回设备的当前热状态等级。
-
addThermalStatusListener();//添加监听器。
-
removeThermalStatusListener();//移除之前添加的监听器。
以上方法获取的热状态等级为当前热状态码值。在ThermalHal 2.0中,热状态码分为如下几个级别:
因此应用层调用以上接口方法,假如收到返回值为0x2,说明当前手机热等级为MODERATE (0x2) 中等限制,应用可以根据对应的热等级建议,调整自身逻辑,降低系统负载,缓解手机发热,进而增强在高温状态下的用户体验。
2. Android系统应用可调用接口
对于Android系统内部组件来说,还可以注册IThermalEventListener回调接口等方法进行监控访问更加详细的热传感器和热事件信息;例如,Android系统内部组件可注册IThermalEventListener事件,监听手机表面温度变化,例如: